Shaggy Lid
Shaggy Lid

Reputation: 55

How to continue looping of do while after exception

After the programs reads the exception it stops.

A need a little help on how to make it continue to the beginning of the loop.

I tried the continue statement but it did not work or maybe my mistake.

package labexer5a;
import java.util.*;

public class LabExer5A {

    public static void main(String[] args) {
        int max = 50;
        int min = 1;

        int secretNumber;
        secretNumber = (int)(Math.random() * 49 + 1);

        Scanner keyboard = new Scanner(System.in);
        int guess;
        int count = 0;
        try{
            do{
                System.out.println("Guess a number from 1 to 50");
                guess = keyboard.nextInt();
                count ++;

                if(guess == secretNumber){
                    if(count> 1){
                    System.out.println("You got it in " + count + " attempt(s)");
                    }
                    else{
                        System.out.println("You got it in " + count + " attempt");
                    }
                }
                else if(guess > max){
                    System.out.println("Out of Range");
                }
                else if(guess < min){
                    System.out.println("Out of Range");
                }
                else if(guess > secretNumber){
                    System.out.println("Too High. Try Again");
                }
                else if(guess < secretNumber){
                    System.out.println("Too Low. Try Again");
                }                
            }
            while(guess != secretNumber);
        }

        catch(InputMismatchException e){           
            System.out.println("Invalid Input");            
        }    
    }    
}

Upvotes: 2

Views: 544

Answers (3)

Joakim Danielson
Joakim Danielson

Reputation: 51973

Move the try/catch inside the loop and place it around the specific code that throws an exception.

do{
    System.out.println("Guess a number from 1 to 50");
    try {
        guess = keyboard.nextInt();
    } catch (InputMismatchException e){
        System.out.println("Invalid Input");
        keyboard.readLine();
        continue;
    }
    count ++;
    // rest of code
while(guess != secretNumber); 

I am not sure how you want to handle count when you get an exception, if you want to count every attempt even the incorrect one then move count++ to before you read from the scanner.

Upvotes: 10

flycash
flycash

Reputation: 494

Try this:

public class LabExer5A {
    public static void main(String[] args) {
        int max = 50;
        int min = 1;

        int secretNumber;
        secretNumber = (int)(Math.random() * 49 + 1);

        Scanner keyboard = new Scanner(System.in);
        // you should initiate the value. If there is no exception, it would be replaced by the value read from console.
        int guess = Integer.MAX_VALUE;
        int count = 0;

            do{
                System.out.println("Guess a number from 1 to 50");
                try {
                    guess = keyboard.nextInt();
                } catch(InputMismatchException e){
                    System.out.println("Invalid Input");
                    // you should really read the input
                    keyboard.next();
                    count ++;
                    continue;
                }

                count ++;

                if(guess == secretNumber){
                    if(count> 1){
                        System.out.println("You got it in " + count + " attempt(s)");
                    }
                    else{
                        System.out.println("You got it in " + count + " attempt");
                    }
                }
                else if(guess > max){
                    System.out.println("Out of Range");
                }
                else if(guess < min){
                    System.out.println("Out of Range");
                }
                else if(guess > secretNumber){
                    System.out.println("Too High. Try Again");
                }
                else if(guess < secretNumber){
                    System.out.println("Too Low. Try Again");
                }
            }
            while(guess != secretNumber);
        }
}

Upvotes: 0

rockfarkas
rockfarkas

Reputation: 132

package labexer5a; import java.util.*;

public class LabExer5A {

public static void main(String[] args) {

  int max = 50;
  int min = 1;

  int secretNumber;
  secretNumber = (int)(Math.random() * (max-1) + min);

  Scanner keyboard = new Scanner(System.in);
  int guess;
  int count = 0;
  do {
    System.out.println("Guess a number from "+min+" to "+max);

    try{
        guess = keyboard.nextInt();
    }
    catch(InputMismatchException e){

        System.out.println("Invalid Input");
        continue;

    } finally { // don't forget finally clause to increase count
        count ++;
    }

    if(guess == secretNumber){
        if(count> 1){
            System.out.println("You got it in " + count + " attempt(s)");
        }
        else{
                System.out.println("You got it in " + count + " attempt");
        }
    }
    else if(guess > max){
            System.out.println("Out of Range");
    }
    else if(guess < min){
            System.out.println("Out of Range");
    }
    else if(guess > secretNumber){
            System.out.println("Too High. Try Again");
    }
    else if(guess < secretNumber){
            System.out.println("Too Low. Try Again");
    }

  }
  while(guess != secretNumber);

  }
}

Upvotes: 0

Related Questions