armtrong number java code

时间:2018-01-15 01:55:27

标签: java

我在java中为学校写了一个代码来验证一个数字是否是一个非常强的数字。我对它进行了编程,使其运行多次,直到用户输入0,程序将终止该程序。我有两个问题。

  1. 代码只在第一次通过,如果用户第一次输入371(一个阿姆斯特朗号码),它可以工作,但之后它返回该数字不是一个非常强的数字。

  2. 当用户输入0时,它仍会显示声明是否是一个非常强的号码,这是我不想要的。

  3. 这是代码:

    import java.util.Scanner; //import Scanner for user input   
    
    public class Ch6Project {    
    
        public static void main(String[] args) {  
    
            int userNum, totalValue = 0, num, numLength; //declare variables that will be used
            String suserNum; //declare user input variable
            Scanner input = new Scanner(System.in); //declare a Scanner
    
            System.out.println("Welcome to the Armstrong Number Program."); //description
            System.out.println("\nTo calculate an Armstrong number: ");
            System.out.println("\t 1. Cube each digit of the number.");
            System.out.println("\t 2. Take the sum of these cubes.");
            System.out.println("\t 3. If the sum equals the number, it is an Armstrong Number.");
            System.out.println("\t e.g. 3^3 + 1^3 + 7^3 = 317");
    
            do {
                System.out.print("\nEnter a whole number (0 to quit): ");
                suserNum = input.nextLine(); //collect user input
                userNum = Integer.parseInt(suserNum); //parse user input
                numLength = suserNum.length(); //calculate length of user input
    
                for (int i = numLength; i > 0; i--) { //create loop to run for n times 
                    num = Integer.parseInt(suserNum.substring(numLength - 1, numLength)); //get last digit of number
                    totalValue += Math.pow(num, 3); //cube a digit 
                    numLength--; //subtract userNum by 1 to get the rest of the digits
                }
    
                if (totalValue == userNum) { //if total value equals user input, it is Armstrong #
                    System.out.println("Your number is an Armstrong number.");
                } else { //if total value does not equal user input, it is not an Armstrong #
                    System.out.println("Your number is not an Armstrong number.");
                }
    
            } while (userNum != 0); //run loop until user input == 0
            input.close(); //close user input
    
        }
    }
    

2 个答案:

答案 0 :(得分:1)

更改您的代码,使其在输入userNum

后立即中断

e.g。

userNum = Integer.parseInt(suserNum); //parse user input
if (userNum == 0) {
   break;
}

然后你也可以将你的循环改为无限循环

while (true) {
   // your code
}

答案 1 :(得分:0)

它只是第一次起作用,因为你没有重置你的sum变量:就在do插入之后:

do { totalValue =0;.. }while (userNum != 0);

此外,您的代码并未立即退出,因为条件的检查结束,因此您插入数字,执行代码然后检查。顺便说一句:什么时候可以,避免使用break语句。

在读取数字后输入if控件,如下所示:

do {
    System.out.print("\nEnter a whole number (0 to quit): ");
    suserNum = input.nextLine(); //collect user inputuserNum = 
    Integer.parseInt(suserNum); //parse user input

    if(userNum !=0){...your code...}
}while (userNum != 0);

有很多更优雅的方式来编码它,但这应该做的工作