-1

我正在创建一个测验类型的控制台应用程序,它根据答案的正确或不正确记录用户的分数。我想知道(因为有多个类别)创建一个分数类而不是单独在方法中是否是一个更好的主意。如果是这样,实现这一点的最佳方法是什么。外部资源也大受欢迎

当前代码如下

import java.util.Scanner;

public class DummyQuiz {
    static Scanner input = new Scanner(System.in);
    static int score = 0;

    public static void category1()
    {
        int answer1;
        System.out.println("Question 1");
        System.out.println("1) answer 1");
        System.out.println("2) answer 2");
        answer1 = input.nextInt();

        if(answer1 == 1)
        {
            System.out.println("Correct!\n");
            score++;
        }
        else
        {
            System.out.println("Incorrect\n");
        }                     
    }//category1

    public static void main(String []args){

        category1();
        // Output final score here

    }
}
4

4 回答 4

0

在两种情况下,我会将值封装在一个新类中:

  1. 您有多个在语义上属于一起的值。例如,对于名字和姓氏,您将创建一个人员类。
  2. 你想为你的值定义一个特殊的行为,比如某些数学运算。然后我会创建一个值类(它是不可变的)。例如,您可以使用金额或日期来执行此操作。

在你的情况下,它只是一个增量int,所以你应该没问题,特别是对于这么小的项目。但是无论如何创建一个类都不会错。

于 2013-11-14T17:03:51.773 回答
0

考虑做这样的事情:

public static int category1()
{
    int answer1;
    System.out.println("Question 1");
    System.out.println("1) answer 1");
    System.out.println("2) answer 2");
    answer1 = input.nextInt();

    if(answer1 == 1)
    {
        System.out.println("Correct!\n");
        return 1;
    }
    else
    {
        System.out.println("Incorrect\n");
        return 0;
    }                     
}//category1

public static void main(String []args){
    score += category1();
}

你现在做的方式应该没有问题。您应该将 score 设为私有变量,以使其不能被其他类修改。创建一个分数对象对于一种原始类型来说是多余的。

如果您想对类/对象进行一些练习,请考虑制作一个类别对象,其中包含您可以从主类调用的问题对象。

于 2013-11-14T17:03:53.613 回答
0

我会敦促您首先将您的问题清理为对象。请注意,问题应负责确定答案是否正确。您创建问题的集合(或数组),打印它们(调用 toString),通过调用 isAnswerCorrect 测试是否正确,我认为您会发现评分很容易(通过测试您知道的问题集合/数组大小一开始会询问总数):

public class Question {
  private String question;
  private int answer = 1;

  public Question(String question, int answer) {
    this.question = question;
    if (answer > 0) {
      this.answer = answer;
    } else {
      System.err.println("0 is no answer (e.g. not a value)");
    }
  }

  public boolean isAnswerCorrect(Integer answer) {
    return this.answer == (int) answer;
  }

  public int getCorrectAnswer() {
    return answer;
  }

  public String toString() {
    return question;
  }
}
于 2013-11-14T17:07:44.340 回答
0

我会用几种不同的方式来做,不确定你有多新,但你可能想使用你觉得最舒服的一种

首先,您可以在同一个类中使用 HashMap

HashMap<Integer, Boolean> responses = new HashMap<Integer, Boolean>(); //<K (Question #),V (Correct response)>

要添加到此哈希图中,只需使用

response.put(<question number>, <correct response?>);

例如,如果您想将其打印到控制台,

for (int i = 0; i < responses.keySet().size(); i++){
   System.out.println(responses.keySet().get(i)+" "+responses.values().get(i));
}    

如果您想以另一种方式执行此操作并实际创建一个类

public class answers{
public List<Boolean> repsonse = new ArrayList<Boolean>();


   public void put(int num, boolean response){
numbers.set(num,response);
}
public boolean getRepsonse(int num){
return numbers.get(num)
}
}

但是那个方法真的是多余的

希望有帮助

于 2013-11-14T17:11:29.670 回答