我在java中为学校写了一个代码来验证一个数字是否是一个非常强的数字。我对它进行了编程,使其运行多次,直到用户输入0,程序将终止该程序。我有两个问题。
代码只在第一次通过,如果用户第一次输入371(一个阿姆斯特朗号码),它可以工作,但之后它返回该数字不是一个非常强的数字。
当用户输入0时,它仍会显示声明是否是一个非常强的号码,这是我不想要的。
这是代码:
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
}
}
答案 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);
有很多更优雅的方式来编码它,但这应该做的工作