简体   繁体   中英

Making an Armstrong number checker but if condition is not working

I was making an Armstrong number checker not for only 3 digits numbers for which I used Math.pow() method but after using it the if else statement is not working also when the condition is true.

Here is the code:

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 ");
            
           }
 
}
}
///////////////////////////////////////////

And this is the Compilation of my code:
在终端中编译此代码

if(val == numc){ - This if part is the root cause of your problem. you are dividing numc by 10 for calculations. So at the end it will become 0. so you will be checking if val == 0 which goes to the else loop.

So I would suggest to assign the input from the user to another variable which you can use for checking the final if - else part.

Like int input = num and at the end if(val==input){ . This would resolve your issue.

The num and numc become zero due to "/= 10" operation. Hence the if condition fails.

Also you need not compute the length of integer every time.

Don't have the reputation to comment hence giving a full fledged solution.

Following is my solution to your problem. All the best!

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;
                    }
                }
            }
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM