减少方法中for循环的数量

时间:2015-10-07 19:06:03

标签: java loops cyclomatic-complexity

我正在尝试减少此方法中for循环的数量,但我不确定如何在保持逻辑运行并且不转向其他方法的同时执行此操作。我想这样做是为了减少JSFiddle,它随着每个循环增加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();
        }
    }

3 个答案:

答案 0 :(得分:4)

    for (int i = 0; i < LINES_PER_PAGE; i++) {
        nextLine[i] = null;
    }

这是完全没必要的,因为任何对象的默认值都是java中的null

在两个循环的其余部分中,您调用两个不同的方法,第二个循环也取决于参数,因此我不确定它们是否可以合并为一个循环。

由于似乎nextLine在方法之外声明,我建议您使用List<Sometype>并在每次输入方法时添加来自expandTabs(temp.nextLine());的元素清除列表list.clear()

试试这段代码。使用适当的类型声明List<String>。您可以使用List方法从myList.get(index)访问该元素。

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();
  }
}

答案 1 :(得分:0)

我建议跳过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++;
        }

答案 2 :(得分:0)

你可以替换

for (int i = 0; i < LINES_PER_PAGE; i++)
    {
        nextLine[i] = null;
    }

致电Arrays.fill