Не могу прекратить чтение ввода в Java - PullRequest
0 голосов
/ 18 июня 2019

Этот вопрос был задан здесь & здесь , но ни один из них не работал для меня. Те, которые содержали br.readLine() or scn.nextInt() в цикле; мой нет. Следующий код проверяет номера Армстронга:

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 компилятор - тот же результат.

Вот как выглядит результат: Не останавливается ...!

OpenJDK-8

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

у вас есть бесконечный цикл в вашем коде:

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
}
2 голосов
/ 18 июня 2019

У вас есть бесконечный цикл:

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
}
...