Search code examples
javaloopswhile-loop

Mistake about "devided by zero"


So , there's the code where I try to figure out prime number. Its crucial to use while loop instead of for. When I try to run this code its working correctly , but in the end printing "Exception in thread "main" java.lang.ArithmeticException: / by zero" mistake.

Scanner new_input = new Scanner(System.in);
        int number = new_input.nextInt();
        boolean True = true;
        int just_number = 0;
        int sum = 0;

        while (True){
            just_number += 1;
            if (number % just_number == 0){
                sum += 1;
                if (just_number == number && sum == 2){
                    System.out.println(number + " is prime number");
                }
                else if(just_number == number && sum != 2){
                    System.out.println(number + " isn't prime number");
                }
            }
            else{
                continue;
            }

I specially printed just_number += 1 in the start of the loop to fix this problem , but it isn't.


Solution

  • As already stated, you loop forever, updating just_number. The following corrects that and offers a way to stop the program. The signficant change is to break out of the inner while loop after the result is determined.

    while (true) {
         System.out.print("Please enter an integer: ");
         int number = new_input.nextInt();
         if (number <= 0) {
             System.out.println("Bye!");
             break;
         }
         int just_number = 0;
         int sum = 0;
    
         while (true) {
             just_number += 1;
             if (number % just_number == 0) {
                 sum += 1;
                 if (just_number == number && sum == 2) {
                     System.out.println(number + " is prime number");
                     break;
                 } else if (just_number == number && sum != 2) {
                     System.out.println(number + " isn't prime number");
                     break;
                 }
             }
         }
    
     }
    

    Note that there are more efficient ways to accomplish this and SO has many examples.