制作阿姆斯特朗号码检查器,但如果条件不起作用

Making an Armstrong number checker but if condition is not working

我正在制作一个 Armstrong 数字检查器,不仅用于我使用 Math.pow() 方法的 3 位数字,而且在使用它之后,如果条件为真,if else 语句也不起作用。

代码如下:

import java.util.Scanner;
import java.lang.Math;
class Main {
 ////////////////////////////////////////////

 ////////////////////////////////////////////
 public static void main(String args[])
{
 System.out.println("Hello world!");
 Scanner sc = new 
 Scanner(System.in);
 int num = sc.nextInt();
 int  numc = num ; 
 double rem = 0;
 double cu = 0;
 int val = 0;
 int val2 = 0;
 
 
 while(num != 0){
  rem = num%10;
  
  while(numc != 0){
   numc /=10;
   int i = 0;
   i++;
   val2 += i; 
  }


  cu = Math.pow(rem,val2 );
  val += cu; 
  num /= 10;
 }


 if(val == numc){
    System.out.println("Yes its a "+val2+"  Armstrong number because its returning " + val+"after Calculations ");
   }
   else{
     System.out.println("No its not a "+val2+" digit Armstrong number because its returning " + val +" after Calculations ");
            
           }
 
}
}
///////////////////////////////////////////

这是我的代码的编译:

if(val == numc){ - 这部分是您问题的根本原因。您将 numc 除以 10 进行计算。所以最后它会变成 0 。所以你将检查是否 val == 0 进入 else 循环。

所以我建议将用户的输入分配给另一个变量,您可以用它来检查最后的 if - else 部分。

喜欢 int input = num 并在最后 if(val==input){ 。这将解决您的问题。

由于“/=10”操作,num 和 numc 变为零。因此 if 条件失败。

也不需要每次都计算整数的长度。

没有评论的声誉,因此提供了一个完整的解决方案。

以下是我对您的问题的解决方案。 祝一切顺利!

import java.util.Scanner;
import java.lang.Math;

class Main {
    ////////////////////////////////////////////

    ////////////////////////////////////////////
    public static void main(String args[]) {
        System.out.println("Hello world!\n");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int numc = num;
        double rem = 0;
        double cu = 0;
        int val = 0;
        int val2 = countNumOfDigits(num);
        
        while (num != 0) {
            rem = num % 10;
            cu = Math.pow(rem, val2);
            val += cu;
            num /= 10;
        }

        if (val == numc) {
            System.out.println("Yes its a " + val2 + " digit  Armstrong number because its returning " + val
                    + "after Calculations ");
        } else {
            System.out.println("No its not a " + val2 + " digit Armstrong number because its returning " + val
                    + " after Calculations ");

        }

    }
    
    private static int countNumOfDigits(int number) {
        if (number < 100000) {
            if (number < 100) {
                if (number < 10) {
                    return 1;
                } else {
                    return 2;
                }
            } else {
                if (number < 1000) {
                    return 3;
                } else {
                    if (number < 10000) {
                        return 4;
                    } else {
                        return 5;
                    }
                }
            }
        } else {
            if (number < 10000000) {
                if (number < 1000000) {
                    return 6;
                } else {
                    return 7;
                }
            } else {
                if (number < 100000000) {
                    return 8;
                } else {
                    if (number < 1000000000) {
                        return 9;
                    } else {
                        return 10;
                    }
                }
            }
        }
    }
}