java中的文件输入有问题

umuewwlo  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(228)

我必须得到一个整数文本文件,并输出最大值和最小值,使用try-catch块捕捉错误。我知道这和while循环附近的文件名扫描器有关。

int currentVal;
        boolean value = true;
        int max = 0;
        int min = 0;

        Scanner input = new Scanner(System.in);

        try {

        System.out.print("Enter the file name:");
        String fileName = input.next();

        }catch(FileNotFoundException e) {
            System.out.println("Error occured");
            e.printStackTrace();
        }

    Scanner readFile = new Scanner(new File(fileName));
        while (readFile.hasNext()) {
            currentVal = readFile.nextInt();
            if(readFile.hasNextInt()) {
                max = currentVal;
                min = currentVal;
            } else {
                max = Math.max(max, currentVal);
                min = Math.min(min, currentVal);
            }

        System.out.println("Maximum and Minimums will be printed");
        System.out.println("Maximum: " + max);

    }

    }}```
6mw9ycah

6mw9ycah1#

我认为缺陷存在于以下if块中:

if(readFile.hasNextInt()) {
            max = currentVal;
            min = currentVal;
        } else {
            max = Math.max(max, currentVal);
            min = Math.min(min, currentVal);
        }

为什么需要一直更新max&min?
您应该更新比较逻辑,如下所示:

currentVal = readFile.nextInt();
            max = Math.max(max, currentVal);
            min = Math.min(min, currentVal);

并在循环前用max=integer.min\u值和min=integer.max\u值初始化max和min

pbpqsu0x

pbpqsu0x2#

所以这里有两个问题,一个是try/catch的位置,另一个是可变范围。我不是说你的计算中有任何逻辑错误,如果它们存在的话。只是想帮助程序运行。
你现在有

try {
   System.out.print("Enter the file name:");
   String fileName = input.next();
} catch (FileNotFoundException e) {
   System.out.println("Error occured");
   e.printStackTrace();
}

这里有两个问题:
try块中的两个语句不存在期望的异常,因此不会处理可能引发异常的位置。 String filename ,因为它存在于try块中,所以对它后面的代码不可见(try块之外)
那该怎么办呢?
你对试抓块的想法是对的,只是找错地方了!当你试图打开文件时,你需要它。
确保 String filename 在需要使用的地方是可见的

Scanner input = new Scanner(System.in);
System.out.print("Enter the file name:");
String fileName = input.next();
try {
    Scanner readFile = new Scanner(new File(fileName));
    while (readFile.hasNext()) {
        currentVal = readFile.nextInt();
        if (readFile.hasNextInt()) {
            max = currentVal;
            min = currentVal;
        } else {
            max = Math.max(max, currentVal);
            min = Math.min(min, currentVal);
        }
        System.out.println("Maximum and Minimums will be printed");
        System.out.println("Maximum: " + max);
    }
} catch (FileNotFoundException e) {
    System.out.println("Error occured");
    e.printStackTrace();
}

相关问题