问题考虑一次考试有4道试题。一页由一个问题组成,是一个多选题。您可以使用特定命令在问题之间前后移动。每一页都应表示为一个类,最后一页是您在这些问题中选择的内容的摘要。写一个程序,让你用面向对象的方法来实现。
命令-用户可以在程序中使用
start() - To start the test and the first page of the test should be given once this command run.
next_page() - To move to the next page
back_page() - To move back a page
select(int i) - Select an answer on the current page
我被赋予上述问题,我需要写一个程序,工作的意图。这是我到目前为止的情况。我可以自由设计的程序,任何方式,我想没有任何限制。如果我下面的设计是完全错误的,请随时告诉我该如何处理这个问题。
我的问题课是这样的:
class Question1
int answer;
void display(){
print("This is Question1")
print("1. Answer")
print("2. Answer")
print("3. Answer")
print("You have selected:" + answer);
}
void select(int i){
this.answer = i;
}
在其他问题课上。它看起来相似,但问题和选择不同。
在小结课上,它将打印出我选择的内容
class Summary() {
void display(){
print("Summary")
print("In question 1, you've selected: " + Question1.answer);
print("In question 2, you've selected: " + Question2.answer)
print("In question 3, you've selected: " + Question3.answer)
print("In question 4, you've selected: " + Question4.answerr);
}
}
我有一门应用课程。就像这个程序的大脑。它存储了打印display()方法的正确类所需的所有信息。它记录了我现在在哪一页。此外,我可以转到下一页,向后移动一页,或选择当前页上的答案。另外,我还有一个抽象的page类,其中每个问题都继承自page类。
//How exactly does the page cluster work?
+--------+---- Page -+---------+-----------+(This is an abstract class)
| | | | |
Question1 Question2 Question3 Question4 Summary (This the 5 pages, that inherited from Page class with)
class Application
int current_p; // Current position of the question.
Page p[] = new Page[5];
public Application(){//Constructor
p[0] = new Quesion1;
p[1] = new Quesion2;
p[2] = new Quesion3;
p[3] = new Quesion4;
p[4] = new Summary;
current_p = 1;
}
public start(){
p[current_p].display();
}
public next(){
current_p++;
p[current_p].display();
}
public back(){
current_pn--;
p[current_p].display();
}
public select(int i){
p[cuurent_p].select(i);// Go back to my Question class to see how select work.
p[current_p].display();
}
因为这是如此之长,它可能会对我试图做什么感到困惑。下面是一个输出示例
Main(){
Application a = new Application();
a.start();
a.select(2);
a.next();
a.select(1);
a.next();
a.next();
a.next();
}
在命令行中,它应该输出如下内容:
This is Question1
1. Answer
2. Answer
3. Answer
You have selected: 0
This is Question1
1. Answer
2. Answer
3. Answer
You have selected: 2
This is Question2
1. Answer
2. Answer
3. Answer
You have selected: 0
This is Question2
1. Answer
2. Answer
3. Answer
You have selected: 1
This is Question3
1. Answer
2. Answer
3. Answer
You have selected: 0
This is Question4
1. Answer
2. Answer
3. Answer
You have selected: 0
Summary
In question 1, you've selected: 2
In question 2, you've selected: 1
In question 3, you've selected: 0
In question 4, you've selected: 0
所以我现在的问题是,我找不到一种方法来从每个问题中得到答案,并在summary类中显示出来。如果我的设计仍然有效,我应该如何改变我的设计?
1条答案
按热度按时间unftdfkk1#
我将通过以下方式解决这个问题:
你有一个
Application
班级。你有个摘要
Page
班级。你有一个
QuestionPage
扩展的类Page
.你有一个
SummaryPage
类,该类还扩展Page
.你有一个
QuestionOption
班级。Application
应该有一个List<Page>
所有你想要的页面。Page
应该有一个display()
方法或类似方法来实现每个不同页面所需的功能。它有点违背了oop的观点,为每个问题创建一个单独的类,所以我将每个问题示例化为一个新的类
QuestionPage
. 因此,要区分每个问题,您需要有一个带有问题参数的构造函数,例如:当你建造
Application
类,您应该输入List<Page>
. 它应该记录下来(pageNumber
)其中Page
你上了。你应该可以打电话给nextPage()
方法,该方法增加pageNumber
重新显示Page
.当他们回答的时候,你会打电话给他们
setInputAnswer
储存他们的答案。这个
SummaryPage
然后遍历所有QuestionPage
并显示它们的inputAnswers
总的来说,我会小心地尝试遵循面向对象的技术-如果你已经有一个新的类来做这项工作,就不要创建一个新的类。另外,在java方面,我个人会为每个应用程序使用一个接口Page
(而不是抽象类),具有displayOptions
方法,因为你对任何两个都没有做完全相同的事情Page
s、 所以在抽象类中没有可以共享和受益的功能。不过,这只是我的偏好。