由于obj.hasNext()的无限循环

时间:2015-05-15 16:25:00

标签: java loops while-loop

我正在尝试解决this问题。以下是输入:

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12

由于我不知道poj.com将输入多少行输入 我使用了以下while循环。

Scanner obj = new Scanner(System.in);


        while(obj.hasNext()){
            double tmp1 = obj.nextDouble();
            int tmp2 = obj.nextInt();
            System.out.println(tmp1+" "+tmp2);

        }

哪个读取数据,我遇到的问题是控件永远不会中断循环。

如果问题的链接变得不可用以下是问题陈述:

In case link for problem becomes unavailable, following is statement
of problem

Description  

Problems involving the computation of exact values of very large
magnitude and precision are common. For example, the computation of
the national debt is a taxing experience for many computer systems. 

This problem requires that you write a program to compute the exact
value of Rn where R is a real number ( 0.0 < R < 99.999 ) and n is an
integer such that 0 < n <= 25. 

Input  

The input will consist of a set of pairs of values for R and n. The R
value will occupy columns 1 through 6, and the n value will be in
columns 8 and 9. 

Output

The output will consist of one line for each line of input giving the
exact value of R^n. Leading zeros should be suppressed in the output.
Insignificant trailing zeros must not be printed. Don't print the
decimal point if the result is an integer. Sample Input

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12 

Sample Output

548815620517731830194541.899025343415715973535967221869852721            .00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

3 个答案:

答案 0 :(得分:1)

hasNext()正在阻止操作。这意味着直到

  • 流未关闭
  • 收到表示流结束的数据,

新数据可能会到达。这意味着hasNext方法无法返回任何答案,直到收到有关 listen 的流状态的正确信息,这意味着它必须等待对于阻止控制流的任何信息。

您应该考虑将数据源从System.in(未关闭或不发送有关其数据结尾的信息)更改为包含有关文件结尾信息的文件。

所以你的代码应该更像

Scanner sc = new Scanner(new File(pathToFile));
...

答案 1 :(得分:1)

您可以输入CTRL-D以使System.in接收EOF,这将结束循环。

答案 2 :(得分:0)

您可能正在检查是否有输入。尝试执行以下操作。 我正在为String类型数组输入输入。如果没有String类型的输入,while循环继续运行。

while(!obj.hasNext()){
    System.out.println("Invalid input");
    obj.next();
}
ar[i]=obj.next();