我想打印给定范围内的所有Armstrong数字,而不考虑用户在Java中输入的数字的位数
我已经编写了这个程序,但找不到其中的错误以获得所需的结果。我想打印给定范围内的所有Armstrong数字,而不考虑用户在Java中输入的数字的位数,java,Java,我已经编写了这个程序,但找不到其中的错误以获得所需的结果。 我已经给出了用户输入的数字范围,并希望在它们之间找到阿姆斯特朗数字 输入:输入要在它们之间打印阿姆斯特朗编号的范围。 100 一万 import java.util.Scanner; 公共类列表{ 公共静态void main(字符串[]args){ 扫描仪=新的扫描仪(System.in); System.out.println(“输入在它们之间打印阿姆斯特朗编号的范围”); int start=scanner.nextInt(); i
我已经给出了用户输入的数字范围,并希望在它们之间找到阿姆斯特朗数字 输入:输入要在它们之间打印阿姆斯特朗编号的范围。 100 一万
import java.util.Scanner;
公共类列表{
公共静态void main(字符串[]args){
扫描仪=新的扫描仪(System.in);
System.out.println(“输入在它们之间打印阿姆斯特朗编号的范围”);
int start=scanner.nextInt();
int end=scanner.nextInt();
整数立方=0,数字,计数器=0;
for(int i=start;i
问题在于每次迭代时都没有将cubeSum
重置为零
在循环之外声明变量没有任何好处。在循环(*)中声明变量实际上不需要花费任何成本:它们甚至在运行时都不存在。在运行时,它只是存储和读取值的“内存中的某个位置”。所以,在尽可能小的范围内声明它们,以避免意外地重用以前计算的值
将cubeSum
的声明移动到for循环中,理想情况下是在while循环之前,在while循环中声明它是递增的(在执行时,也在循环中声明digit
):
更好的方法可能是声明用于计算多维数据集和(和计数,类似地)的方法:
这使得变量的范围更加紧密,因此您不会看到中间计算,并得到更清晰的主要方法,有效地使用最终变量:
int count = count(num);
int cubeSum = cubeSum(i, count);
if (cubeSum == i) {
// Print that it's an Armstrong number.
}
(*)如果在每次迭代中创建一个
new which()
,或者评估一些昂贵的函数,那么分配给变量的值可能会花费一些钱;但是分配常量原语几乎没有成本。您面临的错误是什么?
import java.util.Scanner;
public class ArmstrongList {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the Range to Print Armstrong Number between Them");
int start = scanner.nextInt();
int end = scanner.nextInt();
int cubeSum = 0, digit, counter = 0;
for(int i = start; i < end; i++){
int count = 0;
int num = i;
while(num!=0) { //Count no. of digits in the Number
num /= 10;
++count;
}
int temp = i;
while(temp!=0) {
digit = temp % 10;
cubeSum = cubeSum + (int)(Math.pow(digit , count));
temp/=10;
}
if(cubeSum == i) {
System.out.println(i + " is an Armstrong number ");
if(counter == 0){
System.out.println("Armstrong Number between " + start + " and " + end + ": ");
}
System.out.println(i + " ");
counter++;
}
}
if(counter == 0) {
System.out.println("There is no Armstrong Number between " + start + " and " + end);
}
}
}
int cubeSum = 0;
while(temp!=0) {
int digit = temp % 10;
cubeSum = cubeSum + (int)(Math.pow(digit , count));
temp/=10;
}
int cubeSum(int i, int count) {
int cubeSum = 0;
while(i!=0) {
int digit = i % 10;
cubeSum = cubeSum + (int)(Math.pow(digit , count));
i/=10;
}
return cubeSubm;
}
int count = count(num);
int cubeSum = cubeSum(i, count);
if (cubeSum == i) {
// Print that it's an Armstrong number.
}