【问题标题】:Can't stop reading input in java无法停止在java中读取输入
【发布时间】:2019-10-31 15:18:39
【问题描述】:

有人问过这个问题herehere,但对我都没有用。那些在循环中包含br.readLine() or scn.nextInt();我的没有。 以下代码检查 Armstrong 数字:

import java.io.*;
class Armstrong {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        int val, sum = 0, sav, dig, len;
        System.out.print("Enter a number: ");
        s = br.readLine();
        val = Integer.parseInt(s);
        len = s.length();
        sav = val;
        while(val > 0) {
            dig = val % 10;
            sum += Math.pow(dig, len); //Math class comes under java.lang
        }
        if(sum == sav) {
            System.out.println(sum+" is an Armstrong Number");
        } else  {
            System.out.println(sum+" is NOT an Armstrong Number");
        }
    }
}

我尝试过的:
1. ^Z, ^C(杀死程序)
2. 使用 readLine()、nextInt()、next() 等无济于事
3.在线使用GDB编译器-结果相同。

以下是输出的样子: Does not stop...!

openjdk-8

【问题讨论】:

  • 123 大于 0。所以这个 while 循环永远不会终止。

标签: java java.util.scanner inputstream bufferedreader


【解决方案1】:

你有一个无限循环:

while(val > 0){
    dig = val % 10;
    sum += Math.pow(dig, len); //Math class comes under java.lang
}

您应该更改val 的值以脱离循环,可能在每次迭代时将其除以十:

while(val > 0){
    dig = val % 10;
    val /= 10;
    sum += Math.pow(dig, len); //Math class comes under java.lang
}

【讨论】:

    【解决方案2】:

    您的代码中有一个无限循环:

    while(val>0)
    {
       //problem is here, val is not being changed so you are in an infinite loop
       dig=val%10;
       sum += Math.pow(dig,len); //Math class comes under java.lang
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-21
      • 2018-01-31
      • 2014-12-13
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多