我正在创建一个测验类型的控制台应用程序,它根据答案的正确或不正确记录用户的分数。我想知道(因为有多个类别)创建一个得分类而不是单独在方法中使用它会更好。如果是这样,那么实现这一目标的最佳方式是什么。外部资源也非常欢迎
目前代码如下
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
}
}
答案 0 :(得分:0)
我会在两种情况下将值封装在一个新类中:
在你的情况下,它只是一个递增的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)
}
}
但该方法实际上是多余的
希望有所帮助