Java guess number until it's correct (more than one try)

Viewed 82
import java.util.*;

public class test {
    public static void main (String[] args) {
        System.out.println("Guess how old I am");
        Scanner scan = new Scanner(System.in);
        int myAge = 16;
        int guessedAge = scan.nextInt();

        if (myAge < guessedAge) {
            System.out.println("lower!");

        } else if (myAge > guessedAge) {
            System.out.println("higher!");
        } else if (myAge == guessedAge) {
            System.out.println("correct");

        }

        }
    }

I know that this is just for one try. You guess and it gives you only one output. I want that it works until the right age is guessed but i can't put it in a while loop because it will spam the output of one

6 Answers

Try this:

public class Example {

    static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        int myAge = 16;
        System.out.print("Guess how old I am: ");
        int guessedAge = scan.nextInt();

        do {
            if (myAge < guessedAge) {
                System.out.println("lower!");
            } 
            else 
                System.out.println("higher!");
            guessedAge = scan.nextInt();
        } while(myAge != guessedAge);
    }

}

Output:

enter image description here

Explanation:

  1. do-while will iterate until the condition meets i.e. while(myAge != guessedAge);

Use a do while loop with the if statements in it.

You can do this:

public static void main(String[] args) {
     int myAge = 16, guessedAge = -1;
     Scanner scan = new Scanner(System.in);
     System.out.println("Guess how old I am");
     while(guessedAge != myAge) {
          guessedAge = scan.nextInt();
          if (myAge < guessedAge) {
               System.out.println("lower!");
          } else if (myAge > guessedAge) {
               System.out.println("higher!");
          } else if (myAge == guessedAge) {
               System.out.println("correct");
          }
     }
}

Sample Input/Output:

Guess how old I am
1
higher!
111
lower!
16
correct

You can use recursion

import java.util.*;

public class test {


  public  void Guess()
  {
     System.out.println("Guess how old I am");
        Scanner scan = new Scanner(System.in);
        int myAge = 16;
        int guessedAge = scan.nextInt();

        if (myAge < guessedAge) {
            System.out.println("lower!");
            this.Guess();

        } else if (myAge > guessedAge) {
            System.out.println("higher!");
            this.Guess();
        } else if (myAge == guessedAge) {
            System.out.println("correct");

        }

  }
    public static void main (String[] args) {

    test obj=new test();
    obj.Guess();


        }
    }

See repl here

Your condition else if (myAge == guessedAge) { is always true so you can changed for else { clause only. You can try:

public class test {
    public static void main (String[] args) {
        System.out.println("Guess how old I am");
        Scanner scan = new Scanner(System.in);
        int myAge = 16;

    guess:
    {
        while(myAge != guessedAge) {
            int guessedAge = scan.nextInt();
            if (myAge < guessedAge) {
                System.out.println("lower!");
            } else if (myAge > guessedAge) {
                System.out.println("higher!");
            } else {
                System.out.println("correct");
            }
        }
    }

    }
}

or

public class test {
    public static void main (String[] args) {
        System.out.println("Guess how old I am");
        Scanner scan = new Scanner(System.in);
        int myAge = 16;

        while(myAge != guessedAge) {
            int guessedAge = scan.nextInt();
            if (myAge < guessedAge) {
                System.out.println("lower!");
            } else if (myAge > guessedAge) {
                System.out.println("higher!");
            } else {
                System.out.println("correct");
            }
        }
    }
}

also, you can use recursion:

public class test {
    public static void main (String[] args) {
        test guessAge=new test();
        guessAge.guess();
    }

    public  void guess() {
        System.out.println("Guess how old I am");
        Scanner scan = new Scanner(System.in);
        int myAge = 16;

        int guessedAge = scan.nextInt();
        if (myAge < guessedAge) {
            System.out.println("lower!");
            this.guess();
        } else if (myAge > guessedAge) {
            System.out.println("higher!");
            this.guess();
        } else {
            System.out.println("correct");

        }
    }
}

I haven't used Java for a while but i think you need something like this:

import java.util.*;

public class test {
    public static void main (String[] args) {
        System.out.println("Guess how old I am");
        Scanner scan = new Scanner(System.in);
        int myAge = 16;
        int guessedAge = scan.nextInt();

    while(myAge != guessedAge){
        if (myAge < guessedAge) {
            System.out.println("lower!");
        } else if (myAge > guessedAge) {
            System.out.println("higher!");
        }

    guessedAge = scan.nextInt();

    }

    System.out.println("correct");
}
Related