Search code examples
javado-loops

How to make do-loop conditions "when string does not equal"


I want to make my do loop run while the input the user made is not equal to the required letters (a-i) For some reason,even when i input the proper letters, it loops forever.

I've tried using switch cases as well as != inside the comparison.

Here is my code:

do {
            System.out.println("Please enter the location of your battleship, starting with the first letter value. Make sure it is from the letters a-i.");
            lL1=in.nextLine();
            if (!lL1.equals("a")||!lL1.equals("b")||!lL1.equals("c")||!lL1.equals("d")||!lL1.equals("e")||!lL1.equals("f")||!lL1.equals("g")||!lL1.equals("h")||!lL1.equals("i")){
                System.out.println("Invalid Input. Try again.");
            }//End if statement
}while(!lL1.equals("a") || !lL1.equals("b") || !lL1.equals("c") || !lL1.equals("d") || !lL1.equals("e") || !lL1.equals("f") || !lL1.equals("g") || !lL1.equals("h") || !lL1.equals("i"));

My skills in Java are limited but this should work, unless i'm missing something obvious. Any help would be amazing!


Solution

  • Instead of using an operator for each case of the input, you might want to create a list of the accepted answers and then your condition will look like:

    while answer is not in accepted answers, ask another input

    An example would be:

    Scanner scanner = new Scanner(System.in);
    List<String> acceptedAnswers = Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i");
    String input;
    do {
        System.out.println(
                "Please enter the location of your battleship, starting with the first letter value. Make sure it is from the letters a-i.");
        input = scanner.nextLine();
    } while (!acceptedAnswers.contains(input));
    scanner.close();
    System.out.println("Got correct input: " + input);