减少方法中的 for 循环次数
Reduce number of for loops in method
我正在尝试减少此方法中 for 循环的数量,但我不确定如何做到这一点,同时仍然保持逻辑完好无损,而不是转向另一种方法。我想这样做是为了减少 McCabe Cycolmatic Complexity,它随着每个循环增加 1。所以我想将方法减少 1。
private void method(int page)
{
for (int i = 0; i < LINES_PER_PAGE; i++)
{
nextLine[i] = null;
}
try
{
Scanner temp = new Scanner(fileToPrint);
for (int i = 0; i < page - 1; i++)
{
skipAPage(temp);
}
for (int i = 0; (i < LINES_PER_PAGE) && (temp.hasNext()); i++)
{
nextLine[i] = expandTabs(temp.nextLine());
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
for (int i = 0; i < LINES_PER_PAGE; i++) {
nextLine[i] = null;
}
这是完全没有必要的,因为任何对象的默认值都是 java.
中的 null
在剩下的两个循环中,你调用了两个不同的方法,你的第二个循环也依赖于参数,所以我不确定它们是否可以合并为一个循环。
因为 nextLine
似乎是在方法外部声明的,所以我建议您每次输入时都使用 List<Sometype>
并将来自 expandTabs(temp.nextLine());
的元素添加到其中该方法清除列表 list.clear()
.
试试这个代码。使用适当的类型来声明 List<String>
。您可以使用 myList.get(index)
方法从 List
访问元素。
List<String> myList = new ArrayList<>();
private void method(int page) {
try {
myList.clear(); // Clear the list.
Scanner temp = new Scanner(fileToPrint);
for (int i = 0; i < page - 1; i++) {
skipAPage(temp);
}
for (int i = 0; (i < LINES_PER_PAGE) && (temp.hasNext()); i++) {
myList.add(expandTabs(temp.nextLine())); // Add the elements to the list.
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
我建议跳过 skipAPage
步骤,因为我假设其中有另一个循环:
Scanner temp = new Scanner(fileToPrint);
int linesToSkip = page * LINES_PER_PAGE;
int i = 0;
while ( temp.hasNext() ) {
if ( i >= linesToSkip && i < linesToSkip + LINES_PER_PAGE)
nextLine[i] = expandTabs(temp.nextLine());
else
temp.nextLine();
i++;
}
你可以替换
for (int i = 0; i < LINES_PER_PAGE; i++)
{
nextLine[i] = null;
}
调用 Arrays.fill。
我正在尝试减少此方法中 for 循环的数量,但我不确定如何做到这一点,同时仍然保持逻辑完好无损,而不是转向另一种方法。我想这样做是为了减少 McCabe Cycolmatic Complexity,它随着每个循环增加 1。所以我想将方法减少 1。
private void method(int page)
{
for (int i = 0; i < LINES_PER_PAGE; i++)
{
nextLine[i] = null;
}
try
{
Scanner temp = new Scanner(fileToPrint);
for (int i = 0; i < page - 1; i++)
{
skipAPage(temp);
}
for (int i = 0; (i < LINES_PER_PAGE) && (temp.hasNext()); i++)
{
nextLine[i] = expandTabs(temp.nextLine());
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
for (int i = 0; i < LINES_PER_PAGE; i++) {
nextLine[i] = null;
}
这是完全没有必要的,因为任何对象的默认值都是 java.
中的null
在剩下的两个循环中,你调用了两个不同的方法,你的第二个循环也依赖于参数,所以我不确定它们是否可以合并为一个循环。
因为 nextLine
似乎是在方法外部声明的,所以我建议您每次输入时都使用 List<Sometype>
并将来自 expandTabs(temp.nextLine());
的元素添加到其中该方法清除列表 list.clear()
.
试试这个代码。使用适当的类型来声明 List<String>
。您可以使用 myList.get(index)
方法从 List
访问元素。
List<String> myList = new ArrayList<>();
private void method(int page) {
try {
myList.clear(); // Clear the list.
Scanner temp = new Scanner(fileToPrint);
for (int i = 0; i < page - 1; i++) {
skipAPage(temp);
}
for (int i = 0; (i < LINES_PER_PAGE) && (temp.hasNext()); i++) {
myList.add(expandTabs(temp.nextLine())); // Add the elements to the list.
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
我建议跳过 skipAPage
步骤,因为我假设其中有另一个循环:
Scanner temp = new Scanner(fileToPrint);
int linesToSkip = page * LINES_PER_PAGE;
int i = 0;
while ( temp.hasNext() ) {
if ( i >= linesToSkip && i < linesToSkip + LINES_PER_PAGE)
nextLine[i] = expandTabs(temp.nextLine());
else
temp.nextLine();
i++;
}
你可以替换
for (int i = 0; i < LINES_PER_PAGE; i++)
{
nextLine[i] = null;
}
调用 Arrays.fill。