我想打印给定范围内的所有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.
}