2016-02-24 3 views
1

Iam разрабатывает программу для анализа исходного кода программ. Теперь у меня есть проблемы подсчета результатов, вот мой исходный код:cloc, как суммировать результаты?

public void walk(String path) throws FileNotFoundException { 

    File root = new File(path); 
    File[] list = root.listFiles(); 
    int countFiles = 0; 

    if (list == null) { 
     return; 
    } 

    for (File f : list) { 
     if (f.isDirectory()) { 
      walk(f.getAbsolutePath()); 
     } 

     if (f.getName().endsWith(".java")) { 
      System.out.println("File:" + f.getName()); 
      countFiles++; 
      Scanner sc = new Scanner(f); 
      int count = 0; 
      while (sc.hasNextLine()) { 

       count++; 
       sc.nextLine(); 

      } 
      Scanner sc2 = new Scanner(f); 
      int lower = 0; 
      int upper = 0; 
      int digit = 0; 
      int whiteSpace = 0; 
      while (sc2.hasNextLine()) { 
       String str = sc2.nextLine(); 

       for (int i = 0; i < str.length(); i++) { 
        if (Character.isLowerCase(str.charAt(i))) { 
         lower++; 
        } else if (Character.isUpperCase(str.charAt(i))) { 
         upper++; 
        } else if (Character.isDigit(str.charAt(i))) { 
         digit++; 
        } else if (Character.isWhitespace(str.charAt(i))) { 
         whiteSpace++; 

        } 
       } 
      } 

      System.out.println("Your code contains: " + count + " Lines!, Out of them:"); 
      System.out.println("lower case: " + lower); 
      System.out.println("upper case: " + upper); 
      System.out.println("Digits: " + digit); 
      System.out.println("White Spaces: " + whiteSpace); 

     } 
     System.out.println("You have in total: " + countFiles); 
    } 

} 

Первый вопрос: когда речь идет о countFiles (который должна сказать, сколько .java файлов или классов, которые вы имеете в своем коде) его результаты подсчета и печати выглядят следующим образом: у вас есть в общей сложности = 1 файл у вас есть в общей сложности = 2 файл , так как я могу сделать это, чтобы напечатать мне окончательный результат напрямую, который равен 2 в этом случае?

Второй вопрос: как я могу полностью напечатать сумму строк в коде, вместо того, чтобы показывать их для каждого класса самостоятельно?

Благодаря

+1

«Первый вопрос», перемещая System.out вне цикла в файле –

+0

«Второй вопрос»: тот же самый материал , Возможно, вам следует прочитать несколько руководств по переменным * scope * –

+0

@RC. Я попытался вытащить его, давая действительно потрясающий результат! – user5923402

ответ

1

она была решена путем добавления, если Постулаты вне цикл как следующее:

 if(!(countFiles<=0)){ 

       System.out.println("You have in total: " + countFiles); 


    } 
0

Вы печатая результат countFiles для каждого файла Java (это внутри цикла). Чтобы распечатать окончательные результаты, вам нужно только распечатать countFiles после того, как вы их передали.

Просто переместите оператор за пределы цикла.

public void walk(String path) throws FileNotFoundException { 
    // ... 
    int countFiles = 0; 
    // ... 

    for (File f : list) { 
     // ... 

     if (f.getName().endsWith(".java")) { 
      // ... 
     } 
     // System.out.println("You have in total: " + countFiles); 
    } 
    System.out.println("You have in total: " + countFiles); 
} 

Ответ на ваш второй вопрос на самом деле тот же. Перемещение операторов за пределы цикла.

public void walk(String path) throws FileNotFoundException { 
    // ... 
    int countFiles = 0; 
    // ... 

    int count = 0; 
    int lower = 0; 
    int upper = 0; 
    int digit = 0; 
    int whiteSpace = 0; 

    for (File f : list) { 
     // ... 

     // int count = 0; 
     // int lower = 0; 
     // int upper = 0; 
     // int digit = 0; 
     // int whiteSpace = 0; 

     if (f.getName().endsWith(".java")) { 
      // ... 
     } 
     // System.out.println("You have in total: " + countFiles); 
    } 
    System.out.println("You have in total: " + countFiles); 
    System.out.println("Your code contains: " + count + " Lines!, Out of them:"); 
    System.out.println("lower case: " + lower); 
    System.out.println("upper case: " + upper); 
    System.out.println("Digits: " + digit); 
    System.out.println("White Spaces: " + whiteSpace); 
} 

Обратите внимание, что я переехал счетчики из петли, потому что отслеживание результатов между петлей проходит требует, чтобы я иметь переменные в области действия за пределами блока кода.

+0

Спасибо за подробный ответ, я переместил заявление countFiles печати из цикла, это то, что я получаю: У вас есть в общей сложности: 0 Вы в общей сложности: 0 Вы в общей сложности: 0 Вы в всего: 0 Вы в общей сложности: 0 Файл: DiningPhilosophers.java Файл: Philosopher.java Файл: Table.java Вы имеете в общей сложности: 3 Вы имеете в общей сложности: 0 Вы в общей сложности: 0 – user5923402

+0

Не используйте мой код как написано. Я оставил много. Оставьте в логике, в которой выполняется расчет. – Neil

+0

Конечно, нет, все, что я сделал, это то, что я вывел систему из печати из цикла! – user5923402

Смежные вопросы