2

Hi I'm new to java and trying to make a Quiz to practice. I wanna make a Question where the user has to combine words from to categories to pairs. Like A1 B4 C3 D2. What I did now is using an if else statement to check if the input is the correct answer, but it only works with 1A. For the others I can do 6 inputs, which is not what I want, and even if there's a correct one I don't get a point.

public class HelloWorld {

    public static void main(String[] args) {

        Scanner walther = new Scanner(System.in);

        String cro = "1A";
        String dan = "2C";
        String fin = "4D";
        String dut = "3F";
        String fre = "5B";
        String ger = "6E";
        int x = 0;


        if (cro.equalsIgnoreCase(walther.nextLine())){
            ++x;
            walther.close();
        }
        else if (dan.equalsIgnoreCase(walther.nextLine())){
            ++x;
            walther.close();
        }
        else if (fin.equalsIgnoreCase(walther.nextLine())){
            ++x;
            walther.close();
        }
        else if (dut.equalsIgnoreCase(walther.nextLine())){
            ++x;
            walther.close();
        }
        else if (fre.equalsIgnoreCase(walther.nextLine())){
            ++x;
            walther.close();
        }
        else if (ger.equalsIgnoreCase(walther.nextLine())){
            ++x;
            walther.close();
        }
        else {
            walther.close();
        }

    System.out.println(x + " Point!");
    }
}
2
  • Rethink when you should call walther.nextLine() to read a line from the console. You're doing that too often right now. Commented Aug 6, 2016 at 8:34
  • The walther.nextLine() in the first if statement consumes the input, whether the input equals cro or not. Commented Aug 6, 2016 at 8:34

2 Answers 2

3

Calling nextLine() consumes a line from the scanner. You do this on the first if, so the subsequent else if branches are, in fact, comparing the following lines (or null, if you don't have any additional input). Instead, you should consume the line only once, save it to a local variable and use that in your comparisons:

String input = walther.nextLine();
if (cro.equlasIgnoreCase(input)) { // etc...

Having said that, using and if-else structure isn't the neatest solution. You can save a lot of code bloat by using a case insensitive TreeSet:

TreeSet<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
set.addAll(Arrays.asList("1A", "2C", "4D", "3F", "5B", "6E"));
String input = walther.nextLine();
if (set.contains(input)) {
   ++x;
   walther.close();
}
Sign up to request clarification or add additional context in comments.

Comments

-1

People the fact remains that the above provided answer is confusing especially to those who are relatively new to the java community. Hence the requirement is for an easier and simpler answer. Now, Java understands Strings only by the following code :

Scanner sc=new Scanner(System.in);
String a=sc.next();

if (a.equals("xyzzy"))
{
  System.out.println("yes");

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.