有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java TriviaGame方法打印错误值

我正在为两个玩家制作一个琐事游戏。它会分别问他们5个问题,每个问题后会显示答案是正确的还是不正确的,如果答案不正确则会显示正确的答案。程序编译、运行并正确显示,直到显示正确答案为止,无论实际答案是什么,它始终显示3

任何帮助都将不胜感激

import java.util.*;
import java.util.ArrayList;

public class Question
{
private ArrayList <String> questions;
private int answerNumber;
private int questionNumber;
private int [] answers = {3,2,4,3,3,4,4,1,3,3};

public Question()
{
}
public String getQuestion(int number)
{
    return createQuestions(number);
}
public String toString ()
{
    return "Question for player+";
}
public String createQuestions(int questionNumber)
{
    ArrayList<String> questions = new ArrayList<>();

    String question1 = "Who's proffesion was a chef?";
    String question2 = "Who had a son named Ben?";
    String question3 = "Who claimed they were on a break?";
    String question4 = "Who's pick up line was \"How you doin\"?";
    String question5 = "What animal is Chandler afraid of?";
    String question6 = "Who married a gay ice dancer?";
    String question7 = "Who did Rachel almost marry?";
    String question8 = "Who had a pet monkey?";
    String question9 = "Where did the show take place?";
    String question10 = "What was the name of the coffee house?";

    questions.add (question1);
    questions.add (question2);
    questions.add (question3);
    questions.add (question4);
    questions.add (question5);
    questions.add (question6);
    questions.add (question7);
    questions.add (question8);
    questions.add (question9);
    questions.add (question10);

    return questions.get(questionNumber);
}
public String getPossibleAnswers(int questionNumber)
{
    ArrayList <String> possibleAnswers = new ArrayList<>();

    String possibleAnswers1 = "1. Ross\n2. Rachel\n3. Monica\n4. Ross and Monica's mom";
    String possibleAnswers2 = "1. Chandler\n2. Ross\n3. Rachel\n4. Phoebe";
    String possibleAnswers3 = "1. Rachel\n2. Monica\n3. Joey\n4. Ross";
    String possibleAnswers4 = "1. Joey\n2. Ross\n3. Chandler\n4. Phoebe";
    String possibleAnswers5 = "1. Cats\n2. Snakes\n3. Dogs\n4. Monkeys";
    String possibleAnswers6 = "1. Phoebe\n2. Rachel\n3. Janice\n4. Monica";
    String possibleAnswers7 = "1. Ross\n2. Chandler\n3. Gunther\n4. Barry";
    String possibleAnswers8 = "1. Chandler\n2. Ross\n3. Joey\n4. Phoebe";
    String possibleAnswers9 = "1. Atlanta\n2. Detroit\n3. New York City\n4. Las Vegas";
    String possibleAnswers10 = "1. Central Coffee\n2. Coffee Central\n3. Central Perk\n4. There was no coffee shop";

    possibleAnswers.add (possibleAnswers1);
    possibleAnswers.add (possibleAnswers2);
    possibleAnswers.add (possibleAnswers3);
    possibleAnswers.add (possibleAnswers4);
    possibleAnswers.add (possibleAnswers5);
    possibleAnswers.add (possibleAnswers6);
    possibleAnswers.add (possibleAnswers7);
    possibleAnswers.add (possibleAnswers8);
    possibleAnswers.add (possibleAnswers9);
    possibleAnswers.add (possibleAnswers10);

    if (questionNumber == 0)
        answerNumber = 0;
    else if (questionNumber == 1)
        answerNumber = 1;
    else if (questionNumber ==2)
        answerNumber = 2;
    else if (questionNumber == 3)
        answerNumber = 3;
    else if (questionNumber == 4)
        answerNumber = 4;
    else if (questionNumber == 5)
        answerNumber = 5;
    else if (questionNumber == 6)
        answerNumber = 6;
    else if (questionNumber == 7)
        answerNumber = 7;
    else if (questionNumber == 8)
        answerNumber = 8;
    else answerNumber = 9;

    return possibleAnswers.get(answerNumber);
}
public int getCorrectAnswer(int questionNumberAsked)
{
    int answer;

    if (questionNumberAsked == 1)
        answer = answers[0];
    else if (questionNumber == 2)
        answer = answers[1];
    else if (questionNumberAsked == 3)
        answer = answers[2];
    else if (questionNumberAsked == 4)
        answer = answers[3];
    else if (questionNumberAsked == 5)
        answer = answers[4];
    else if (questionNumberAsked == 6)
        answer = answers[5];
    else if (questionNumberAsked == 7)
        answer = answers[6];
    else if (questionNumberAsked == 8)
        answer = answers[7];
    else if (questionNumberAsked == 9)
        answer = answers[8];
    else answer = answers[9];

    return answer;
}

public int getRandomQuestionNumber()
{
    Random random = new Random();
    int questionNumber = random.nextInt(answers.length);

    return questionNumber;
}
public int displayQuestion(int playerNum)
{
        int questionNumber = getRandomQuestionNumber();

        // Display the player number.
        System.out.println("Question for player #" + playerNum);
        System.out.println("------------------------");

        // Display the question.
        System.out.println(getQuestion(questionNumber));
        System.out.println(getPossibleAnswers(questionNumber));

        return questionNumber;
}
}

import java.util.Scanner;

public class TriviaGame
{
public static void main (String [] args)
{
    Scanner keyboard = new Scanner (System.in);
    Question question = new Question ();
    int userAnswer = 0;
    int player1Points = 0;
    int player2Points = 0;

    for (int i = 0; i < 5; i++)
    {
        int questionNumber = question.displayQuestion(1);
        int player1Answer = keyboard.nextInt();

        if (player1Answer == question.getCorrectAnswer(questionNumber))
        {
            System.out.println("That is correct!");
            player1Points ++;
        }
        else System.out.println ("Sorry the correct answer was "+question.getCorrectAnswer(questionNumber));

        int questionNumberPlayer2 = question.displayQuestion(2);
        int player2Answer = keyboard.nextInt();

        if (player2Answer == question.getCorrectAnswer(questionNumberPlayer2))
        {
            System.out.println("That is correct!");
            player2Points ++;
        }
        else System.out.println ("Sorry the correct answer was "+question.getCorrectAnswer(questionNumberPlayer2));

    }

    System.out.println ("Game Over!\n----------------\nPlayer 1 points: "+player1Points+"\nPlayer 2 points "+
    player2Points);

    if (player1Points > player2Points)
        System.out.println ("Player 1 wins!");
    else if (player2Points < player1Points)
        System.out.println ("Player 2 wins!");
    else System.out.println ("It's a tie!");

}
}

共 (1) 个答案

  1. # 1 楼答案

    你的getCorrectAnswer()方法根本不知道所问的随机问题是什么!在相同的方法中,最后一个else块设置为:

    else answer = answers[9];

    由于类级别的int questionNumber的默认值为0,并且与任何条件都不匹配,因此,根据上一个else块answers[9]数组,answer的值始终为3

    To make it work :

    将getCorrectAnswer()方法更改为,以便它知道所询问的问题编号

        public int getCorrectAnswer(int questionNumberAsked) {
        int answer;
    
        if (questionNumberAsked == 0)
            answer = answers[0];
        else if (questionNumberAsked == 1)
            answer = answers[1];
        else if (questionNumberAsked == 2)
            answer = answers[2];
        else if (questionNumberAsked == 3)
            answer = answers[3];
        else if (questionNumberAsked == 4)
            answer = answers[4];
        else if (questionNumberAsked == 5)
            answer = answers[5];
        else if (questionNumberAsked == 6)
            answer = answers[6];
        else if (questionNumberAsked == 7)
            answer = answers[7];
        else if (questionNumberAsked == 8)
            answer = answers[8];
        else if (questionNumberAsked == 9)
            answer = answers[9];
        else answer = 0;
    
        return answer;
    }
    

    在同一个类中,makedisplayQuestion方法返回生成的randomQuestionNumber,并被询问为:

    public int displayQuestion(int playerNum)
    {
            int questionNumber = getRandomQuestionNumber();
            // Display the player number.
            System.out.println("Question for player #" + playerNum);
            System.out.println("            ");
    
            // Display the question.
            System.out.println(getQuestion(questionNumber));
            System.out.println(getPossibleAnswers(questionNumber));
            return questionNumber;
    }
    

    最后在主方法中,将问题编号传递为:

    int questionNumber = question.displayQuestion(1);
            int player1Answer = keyboard.nextInt();
    
            if (player1Answer == question.getCorrectAnswer(questionNumber))
            {
                System.out.println("That is correct!");
                player1Points ++;
            }
            else System.out.println ("Sorry the correct answer was "+question.getCorrectAnswer(questionNumber));
    
            int questionNumberForPlayer2 =  question.displayQuestion(2);
            int player2Answer = keyboard.nextInt();
    
            if (player2Answer == question.getCorrectAnswer(questionNumberForPlayer2))
            {
                System.out.println("That is correct!");
                player2Points ++;
            }
            else System.out.println ("Sorry the correct answer was "+question.getCorrectAnswer(questionNumberForPlayer2));
    
        }