从文本文件中查找最大值

时间:2015-10-10 18:38:25

标签: java arrays file search logic

我一直在努力提高我的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);
    }
}

2 个答案:

答案 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语句以阐明发生的情况。

此代码适用于我。