1

所以我在java中创造了危险,我不在乎我拼错了(如果我拼错了),但到目前为止我只有一个问题编码,只有一个答案,它会问这个问题,但只会打印出你错了,即使答案是正确的。

它在问第一个历史问题,答案是乔治,但它打印出答案是错误的。第一个历史问题也值 100。我还没有开始编写数学部分。

谢谢你能帮我解决我的问题!它可能真的很简单,因为我是初学者。

import java.util.Random;
import java.util.Scanner;

public class game {
public static void main (String[] args){
    //Utilites
    Scanner s = new Scanner(System.in);
    Random r = new Random();

    //Variables
    String[] mathQuestions;
    mathQuestions = new String[3];
    mathQuestions[0] = ("What is the sum of 2 + 2");
    mathQuestions[1] = ("What is 100 * 0");
    mathQuestions[2] = ("What is 5 + 5");

    String[] historyQuestions;
    historyQuestions = new String[3];
    historyQuestions[0] = ("What is General Washingtons first name?");
    historyQuestions[1] = ("Who won WWII, Japan, or USA?");
    historyQuestions[2] = ("How many states are in the USA?");


    //Intro
    System.out.println("Welome to Jeapordy!");
    System.out.println("There are two categories!\nMath and History");
    System.out.println("Math       History");
    System.out.println("100          100");
    System.out.println("200          200");
    System.out.println("300          300");


    System.out.println("Which category would you like?");
        String categoryChoice = s.nextLine();
    System.out.println("For how much money?");
        int moneyChoice = s.nextInt();
            if (categoryChoice.equalsIgnoreCase("history")){
                if (moneyChoice == 100){
                    System.out.println(historyQuestions[0]);
                    String userAnswer = s.nextLine();
                    s.nextLine();
                    if (userAnswer.equalsIgnoreCase("george")){
                        System.out.println("Congratulations! You were right");
                    }
                    else{
                        System.out.println("Ah! Wrong answer!");
                    }

                }
            }

        }
}
4

2 回答 2

3

当您调用 时nextInt(),一个换行符未被读取,因此后续调用nextLine()将返回一个空字符串(因为它读取到行尾)。在读取/丢弃此尾随换行符之前调用newLine()一次:

if (moneyChoice == 100) {
    System.out.println(historyQuestions[0]);
    s.nextLine();  // <--
    String userAnswer = s.nextLine();
    System.out.println(userAnswer);
    ...

顺便说一句,完成后不要忘记关闭Scanner它:s.close().

于 2013-08-22T22:28:19.263 回答
1

int moneyChoice = s.nextInt();只读取整数。它留下一个新行待读。然后String userAnswer = s.nextLine() ;读取一个与“george”明显不同的空行。解决方案:在 int 之后立即读取换行符,并在整个程序中这样做。您可能更喜欢创建自己的方法nextIntAndLine()

int moneyChoice= s.nextInt() ;
s.nextLine();
于 2013-08-22T22:30:47.613 回答