创建一个对象来记录用户分数

时间:2013-11-14 16:53:20

标签: java

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

目前代码如下

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 个答案:

答案 0 :(得分:0)

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

  1. 您有多个在语义上属于一起的值。例如。对于名字和姓氏,你会创建一个人类。
  2. 您希望像某些数学运算一样为您的vaules定义特殊行为。然后我会创建一个值类(它是不可变的)。你会这样做,例如金额或日期。
  3. 在你的情况下,它只是一个递增的int所以你应该没事,特别是对于这么小的项目。但无论如何创建一个课程都没有错。

答案 1 :(得分: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();
}

你现在这样做的方式应该没有问题。您应该将分数设为私有变量,以便其他类不能修改它。仅对一种基本类型创建一个得分对象就太过分了。

如果你想练习类/对象,可以考虑制作一个包含可以从主类调用的问题对象的类别对象。

答案 2 :(得分: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;
  }
}

答案 3 :(得分:0)

我会用几种不同的方式来做,不知道你有多新,但你可能想要使用你觉得最舒服的那种

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

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

添加到此hashmap只需使用

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)
}
}

但该方法实际上是多余的

希望有所帮助