0

在一个学习程序中(我对此知之甚少。它是为了学习 java)输出不会停止在我称之为 getQ 的方法的第二次迭代中获得输入,因为这是一个 pub quiz。

这是代码:

import java.util.Scanner;
public class pubQuizArray {
private static Scanner kb = new Scanner (System.in);
static String[] questions;
static String[][] answers;
static char ans;
static char yn;
static char[] correctAns;
static int questionNum;
static int questionNumArray;
static int numQ;
static int score;

public static void writeQuiz()
{
    getQNum();
    getQ();
}

public static void getQNum()
{
    System.out.println("How many Questions?");
    numQ = kb.nextInt();
    questions = new String[numQ];
}

public static void getAns()
{
    answers = new String[numQ][6];
    System.out.println("What are the answers?");

    System.out.print("a: ");
    answers[questionNum][0] = kb.nextLine();

    System.out.print("b: ");
    answers[questionNum][1] = kb.nextLine();

    System.out.print("c: ");
    answers[questionNum][2] = kb.nextLine();

    System.out.print("d: ");
    answers[questionNum][3] = kb.nextLine();


    correctAns = new char[numQ];
    System.out.println("What is the correct Answer?");
    correctAns[questionNum] = kb.next().charAt(0);

}

public static void getQ()
{
    questionNum = 0;
    System.out.println("What is the First Question?");
    questions[questionNum] = kb.nextLine();
    questions[questionNum] = kb.nextLine();
    getAns();
    questionNum ++;
    while(questionNum < numQ)
    {
        System.out.println("What is the next Question?");
        questions[questionNum] = kb.nextLine();
        getAns();
        questionNum ++;
    }
}

public static void askQ()
{
    questionNum = 0;
    score = 0;
    do
    {
        System.out.println("Q" + (questionNum + 1) +": " + questions[questionNum]);

        System.out.println("a: " + answers[questionNum][0]);
        System.out.println("b: " + answers[questionNum][1]);
        System.out.println("c: " + answers[questionNum][2]);
        System.out.println("d: " + answers[questionNum][3]);

        ans = kb.next().charAt(0);
        if(ans == correctAns[questionNum])
        {
            System.out.println("That was correct");
            score ++;
        }
        else
        {
            System.out.println("That was incorrect");
        }
        questionNum ++;
    }while(questionNum < numQ);
}

public static void menu()

{
    System.out.println("Would you like to write a new Quiz? y/n");
    yn = kb.next().charAt(0);
    while(yn == 'y')
    {
        writeQuiz();
        System.out.println("Would you like to play the Quiz? y/n");
        yn = kb.next().charAt(0);
        while(yn == 'y')
        {
            askQ();
            System.out.println("Would you like to play again? y/n");
            yn = kb.next().charAt(0);
        }
    }
}

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

这是输出

Would you like to write a new Quiz? y/n
y
How many Questions?
2
What is the First Question?
asdf
asdf
What are the answers?
a: asd
b: as
c: a
d: adfs
What is the correct Answer?
a
What is the next Question?
What are the answers?
a: 

正如您所看到的,当它询问第二个问题是它不允许输入时。请记住,这只是一个学习java的项目。

4

1 回答 1

0

我不完全确定是什么原因造成的,但查看 javadoc 评论

Advances this scanner past the current line and returns the input that was skipped. This  
method returns the rest of the current line, excluding any line separator at the end. The 
position is set to the beginning of the next line. 

我的猜测是,当在一行之间调用 nextLine() 时,它会尝试返回上一行中存在的任何内容(不包括换行符)并将扫描仪定位在下一行。

我试图打印 nextLine() 调用返回的字符串的长度,它是 0。

只是为了检查它是否真的返回任何东西,我提供了输入

 What is the correct Answer?
 a b 

并且 nextLine() 调用返回 "b" 字符串(注意空格是必需的,否则整个输入将被视为一个标记,并将由 kb.next() 读取)。

要解决您的问题,您可以在阅读用户的答案时使用 kb.nextLine().chatAt(0) 。

System.out.println("What is the correct Answer?");
correctAns[questionNum] = kb.nextLine().charAt(0);

希望这可以帮助。

于 2013-08-21T17:51:31.880 回答