我一直在努力提高我的java技能,但仍然遇到一些麻烦。对于这个程序,除了我的最终输出外,一切似乎都正常运行。本质上,一旦读入numbers.txt,它应该将值放入一个数组,然后打印出最大的数字。然而,我的逻辑中必定存在缺陷,因为目前它只输出列表中的最高数字而不是找到最大数字。这是我的程序,我发表评论,我认为我的逻辑是有缺陷的。
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ProcessDataFile {
public static void main(String[] args) throws IOException {
String fileName = "numbers.txt";
String temp;
int max = Integer.MIN_VALUE;
int i = 0;
int[] numbers = new int[100000];
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
while ((temp = br.readLine()) != null) {
if (temp.isEmpty())
break;
numbers[i++] = Integer.parseInt(temp);
}
}
// I think my logic error is somewhere in this section.
for (i = 0; i < numbers.length; i++)
if (max < numbers[i])
max = numbers[i];
System.out.println("The largest number is: " + max);
}
}
答案 0 :(得分:1)
是的,这是一个错误但不在您的逻辑中,因为缺少for
括号,所以只有在for
之后的第一行才能进行迭代。用正确的标识查看代码
// I think my logic error is somewhere in this section.
for (i = 0; i < numbers.length; i++)
if (max < numbers[i])
max = numbers[i]; // this line is out of the for scope!!!
只需添加{
和}
即可定义循环范围
// I think my logic error is somewhere in this section.
for (i = 0; i < numbers.length; i++){
if (max < numbers[i])
max = numbers[i];
}
答案 1 :(得分:0)
问题出在你的numbers.txt文件中。将依赖于您所处的平台以及它期望的结束线,但我相信代码可以运行。
我在Mac上运行此代码,在IntelliJ中使用包含随机数的txt文件。它必须触发temp.isEmpty()条件并在读完第一个项目后退出。
检查文件,特别是行结尾。
此外,如果您无法在调试模式中单步执行代码,请尝试添加一些System.out.println语句以阐明发生的情况。
此代码适用于我。