【问题标题】:Infinite loop because of obj.hasNext()由于 obj.hasNext() 导致的无限循环
【发布时间】:2015-05-15 16:25:00
【问题描述】:

我正在尝试解决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

【问题讨论】:

  • 欢迎来到 SO!请描述问题并包括链接。链接有时会变坏,在这种情况下这个问题没有意义。

标签: java loops while-loop


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    所以你的代码应该看起来更像

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

    【讨论】:

    • poj.com 不允许使用文件,您能提出其他解决方案吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2013-09-04
      • 1970-01-01
      • 2020-08-27
      • 2021-05-07
      • 2012-08-24
      相关资源
      最近更新 更多