while循环中的扫描器陷入无限循环

时间:2019-10-27 21:56:20

标签: java

我有以下代码似乎卡在while循环中,但我不知道为什么。注释掉while循环可以使代码干净地运行。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.lang.Integer;

public class Main{
    public static void main(String[] pArgs)throws FileNotFoundException {
        Main mainObject = new Main();
        mainObject.run();
    }

    private void run() throws FileNotFoundException {
        readInputFile();

    }
    public ArrayList<Integer> readInputFile(){
        //reads input file and creates array of integers

        Scanner scanner = new Scanner(System.in);
        ArrayList<Integer> integerList = new ArrayList<Integer>();

        try {
            File in = new File("p01-in.txt");

            while (scanner.hasNext()){
                System.out.println("Tada!");
                int tempInt = scanner.nextInt();
                integerList.add(tempInt);
                return integerList;

            }

        }

        catch(Exception ioException){
            System.out.println("Oops, could not open 'p01-in.txt' for reading. The program is ending.");
            System.exit(-100);
        }

        finally {
            scanner.close();
        }
        return integerList;
    }
}

我尝试在多个位置添加打印语句以缩小错误的位置。该代码执行到while循环,然后卡住,必须手动停止。但是,让我有点不满意的是,我在while循环的顶部添加了一条print语句,但我一无所获。因此,它实际上并没有在while循环本身中执行任何代码,而这正是它所卡住的地方?

输入文件

2 8 3
2 9
8
6
3 4 6 1 9

2 个答案:

答案 0 :(得分:1)

问题出在这里

Scanner scanner = new Scanner(System.in);

您完全忽略了正在打开的文件,而是从stdin中读取。它实际上不是无限循环的。等待输入。

答案 1 :(得分:1)

您的代码未读取文件;它正在等待您键入某些内容

如果要读取文件,则需要将文件传递给扫描仪,而不是function granTotal($request){ $category_id = array(786, 787, 788, 789, 790, 791, 792, 793 ); $increase = array(4.55, 4.55, 5.55, 5.55, 6.55, 6.00, 7.00 ); $base = array(2.45, 2.45, 3.45, 3.45, 3.45, 5.00, 5.00, 6.00 ); $length = count($category_id); $total = 0; for($i=0; $i<$length; $i++){ $total += array_sum(array_map(function ($item) use($category_id, $increase, $base, $i) { return in_array($category_id[$i], $item->product->category_ids) ? ($increase[$i] * $item->qty) + $base[$i] : 0; }, $request->all_items)); } return $total; } $total = granTotal($request); echo $total;

但是,与使用BufferedReader或最好是Streams相比,使用Scanners通常是错误的文件读取模式

System.in