有没有更好的实现方法?
问题描述:
一旦问题得到解答,我会询问用户10个选择题。我想根据他们的答案显示结果。我想知道是否有更好的方法来确定他们的分数,然后做很多if语句?有没有更好的实现方法?
Int result = 100;
if (answer1 == 10) {
result = result +10;
if (answer2 ==20) {
result = result -5;
if (answer3 == 50) {
result = result +20;
}
else if (answer3 == 10)
...
,它会继续...
答
编辑:哦,等一下,我看到它的嵌套。你仍然可以去查找解决方案。代替Map<String, Integer>
,您可以使用类似Map<Map<String,Boolean>, Integer>
的地方,其中Integer是最终得分。
这是一个常见的方式做到这一点:
Map<String, Integer> choice_delta = // new Map
// Define choice delta pairing
choice_delta.put("answer5", -5);
choice_delta.put("answer6", 20);
// etc. etc.
int calculate(String[] answers){
int result = 0;
for (String answer : answers){
int delta = choice_delta.get(answer);
result += delta;
}
return result;
}
答
一般来说,如果一个超越也许4-5类,我会发明一些排序表驱动的方法。准确地说,取决于细节(和我的心情),但Enno's是一个很好的概念,也是典型的概念。
答
如果您正确建模,实施起来会更容易。我不确定你的问题背景,但在这里做出的一些假设是我想出的。
叙事
Quiz
一个是一组Question
的。每个问题都有一个或多个Answer
,每个答案都携带一定的weight
。您为某个特定场景(Java,c#)提供的Quiz并逐一呈现给用户。用户selects
提供的问题的答案,然后您向他展示currentScore
和下一个问题。在提出所有问题后,计算finalScore
。
抽象
- 测验(准备,currentScore(),finalScore())
- 问题(scoreFor)
- 解答(weightedScore)
实施
public class Quiz
{
List<Question> questions = new ArrayList<Question>();
List<String> selectedAnswers = new ArrayList<String>();
private int currentScore;
public void prepare()
{
questions.add(new Question("What comes after A?", Arrays.asList(new Answer("B", 10), new Answer("Z", 5))));
questions.add(new Question("What comes after B?", Arrays.asList(new Answer("A", -5), new Answer("C", 10))));
}
public int finalScore()
{
int result = 0;
for (int i = 0; i < questions.size(); i++)
{
result = result + questions.get(i).scoreFor(selectedAnswers.get(i));
}
return result;
}
public void setSelectedAnswerFor(int questionIndex, String selectedAnswer)
{
assert questionIndex < questions.size();
selectedAnswers.add(questionIndex, selectedAnswer);
currentScore = currentScore + questions.get(questionIndex).scoreFor(selectedAnswer);
}
public int currentScore()
{
return currentScore;
}
public static void main(String args[])
{
Quiz quiz = new Quiz();
quiz.prepare();
quiz.setSelectedAnswerFor(0, "B");
System.out.println("Current Score " + quiz.currentScore());
quiz.setSelectedAnswerFor(1, "A");
System.out.println("Current Score " + quiz.currentScore());
System.out.println("Final Score " + quiz.finalScore());
}
}
public class Question
{
private final String text;
private final Map<String, Integer> weightedAnswers;
public Question(String text, List<Answer> possibleAnswers)
{
this.text = text;
this.weightedAnswers = new HashMap<String, Integer>(possibleAnswers.size());
for (Answer ans : possibleAnswers)
{
weightedAnswers.put(ans.text, ans.score);
}
}
public int scoreFor(String selectAnswer)
{
return weightedAnswers.get(selectAnswer);
}
public String getText()
{
return text;
}
}
public class Answer
{
final String text;
final int score;
public Answer(String text, int score)
{
this.text = text;
this.score = score;
}
}
输出
Current Score 10
Current Score 5
Final Score 5
什么是逻辑?你什么时候增加多少结果? – amit 2012-02-01 01:02:19
正确缩进代码并正确使用大括号 – 2012-02-01 01:02:59
至少,您应该更好地设置您的代码的格式。 – 2012-02-01 01:03:11