我开发了一个程序来分析程序的源代码。现在,我在计算结果时遇到了麻烦,这是我的源代码:
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?
第二个问题:如何完全打印代码中的行总和,而不是自己为每个类显示它们?
由于
答案 0 :(得分:1)
通过在for循环外添加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);
}
请注意,我将计数器移出循环,因为在循环传递之间跟踪结果需要我在代码块之外的范围内有变量。