以下代码有异常吗?package serializablezuoye3;import javaioBufferedReader;import javaioFile;import javaioFileReader;import javaioIOException;public class demo2 public static void mainString args Str
此代码没有语法错误,但存在逻辑错误。在countLines方法中,如果遇到一个目录,会递归调用countLines方法来统计目录下的文件行数,并将结果累加到totalLines变量中。但是在递归调用countLines方法时,对返回值进行了累加操作,导致编译错误。countLines方法应该返回一个int类型的值,而不是void。解决办法是将递归调用的结果赋值给一个变量,然后再将该变量累加到totalLines中。修改后的代码如下:
package serializable.zuoye3;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class demo2 {
public static void main(String[] args) {
String directory = "D:\\powernode\\weihc\\weihc19\\src\\serializable\\zuoye3\\demo1.java"; // 指定目录路径
countLines(directory);
}
public static void countLines(String directory) {
File dir = new File(directory);
if (!dir.isDirectory()) {
System.out.println("指定路径不是一个目录!");
return;
}
int totalLines = 0;
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
int lines = countLines(file.getAbsolutePath());
totalLines += lines;
} else if (file.getName().endsWith(".java")) {
int lines = countFileLines(file);
totalLines += lines;
System.out.println(file.getName() + ":" + lines + "行");
}
}
System.out.println("总行数:" + totalLines);
}
public static int countFileLines(File file) {
int lines = 0;
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
if (!line.trim().isEmpty()) {
lines++;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return lines;
}
}
``
原文地址: https://www.cveoy.top/t/topic/irEl 著作权归作者所有。请勿转载和采集!