cloc,如何总结结果?

时间:2016-02-24 12:45:36

标签: java

我开发了一个程序来分析程序的源代码。现在,我在计算结果时遇到了麻烦,这是我的源代码:

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?

第二个问题:如何完全打印代码中的行总和,而不是自己为每个类显示它们?

由于

2 个答案:

答案 0 :(得分:1)

通过在f​​or循环外添加if语句解决了以下问题:

     if(!(countFiles<=0) ){

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


    }

答案 1 :(得分:0)

您正在为每个java文件打印countFiles的结果(它在您的循环中)。要打印最终结果,只需在传递完所有内容后打印出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);
}

请注意,我将计数器移出循环,因为在循环传递之间跟踪结果需要我在代码块之外的范围内有变量。