[英]C++ design suggestions
我不久前用Java
了一个程序,它实质上是一个数学测验,它根据用户输入随机生成简单的数学问题。 现在,我正在自学C++
,我只是想基于效率和组织性,转换此程序的最佳方法是什么。 例如,如果我的方法是类,则它们应该属于一个类,等等。 任何帮助,将不胜感激! 这是我当前的Java
代码
public class MathQuiz {
Scanner s = new Scanner(System.in);
int numberOne;
int numberTwo;
int actualSolution;
int userSolution;
int numberOfQuestions;
int counter = 1;
int temp;
int randomOperation;
int totalCorrect;
int totalIncorrect;
long startTime;
long endTime;
long totalTime;
double percent;
String operation;
String done;
public void mathQuizzer(){
System.out.println("Welcome to Math Quiz!");
System.out.println("What kind of questions would you like to answer?");
System.out.println("Enter + for Addition");
System.out.println("Enter - for Subtraction");
System.out.println("Enter * for Multiplication");
System.out.println("Enter / for Division");
System.out.println("Enter m for Mix");
operation = s.next();
System.out.println("How many questions would you like to answer? ");
numberOfQuestions = s.nextInt();
System.out.println();
startTime = System.currentTimeMillis();
while(counter <= numberOfQuestions){
if(operation.equals("+")){
System.out.println("Question " + counter + ":");
createAdditionEquation();
checkSolution();
counter++;
}
else if(operation.equals("-")){
System.out.println("Question " + counter + ":");
createSubtractionEquation();
checkSolution();
counter++;
}
else if(operation.equals("*")){
System.out.println("Question " + counter + ":");
createMultiplicationEquation();
checkSolution();
counter++;
}
else if(operation.equals("/")){
System.out.println("Question " + counter + ":");
createDivisionEquation();
checkSolution();
counter++;
}
else if (operation.equals("m")){
System.out.println("Question " + counter + ":");
createMixEquation();
checkSolution();
counter++;
}
else{
System.out.println("Sorry invalid operation");
System.exit(0);
}
}
endTime = System.currentTimeMillis();
report();
}
public void createAdditionEquation(){
numberOne = (int)(Math.random() * (100 + 1));
numberTwo = (int)(Math.random() * (100 + 1));
actualSolution = numberOne + numberTwo;
System.out.println(numberOne + " + " + numberTwo + "= ?");
}
public void createSubtractionEquation(){
numberOne = (int)(Math.random() * (100 + 1));
numberTwo = (int)(Math.random() * (100 + 1));
if(numberOne >= numberTwo){
actualSolution = numberOne - numberTwo;
}
else{
numberOne = temp;
numberOne = numberTwo;
numberTwo = temp;
actualSolution = numberOne - numberTwo;
}
System.out.println(numberOne + " - " + numberTwo + "= ?");
}
public void createMultiplicationEquation(){
numberOne = (int)(Math.random() * (10 + 1));
numberTwo = (int)(Math.random() * ((20 - 1) + 1));
actualSolution = numberOne * numberTwo;
System.out.println(numberOne + " * " + numberTwo + "= ?");
}
public void createDivisionEquation(){
numberOne = (int)(Math.random() * (100 + 1));
numberTwo = (int)(1 +(Math.random() * (10 - 1)));
if((numberOne >= numberTwo) && (numberOne%numberTwo == 0)){
System.out.println(numberOne + " / " + numberTwo + "= ?");
actualSolution = numberOne / numberTwo;
}
else{
createDivisionEquation();
}
}
public void createMixEquation(){
randomOperation = (int)(Math.random() * (5 - 1));
System.out.println("Random Operation: " + randomOperation);
if(randomOperation == 0){
createAdditionEquation();
}
else if(randomOperation == 1){
createSubtractionEquation();
}
else if(randomOperation == 2){
createMultiplicationEquation();
}
else
createDivisionEquation();
}
public void checkSolution(){
System.out.println("Answer = ");
userSolution = s.nextInt();
System.out.println();
if(userSolution == actualSolution){
System.out.println("Correct!");
System.out.println("#########################");
System.out.println();
totalCorrect++;
}
else if(userSolution != actualSolution){
System.out.println("Sorry, wrong answer. The correct solution is: " + actualSolution);
System.out.println("#########################");
System.out.println();
totalIncorrect++;
}
}
public void report(){
percent = ((double) totalCorrect / numberOfQuestions) * 100;
totalTime = (endTime - startTime) / 1000;
System.out.println("Report:");
System.out.println("Questions Answered: " + numberOfQuestions);
System.out.println("Total Correct: " + totalCorrect);
System.out.println("Total Incorrect: " + totalIncorrect);
System.out.println("Percent: " + percent + "%");
System.out.println("Time taken: " + totalTime + " seconds");
}
}
应当指出的是,我知道该程序尚未优化,暂时还可以
这是关于程序设计的。 不用考虑当前程序的优点(为此,请参阅代码回顾 ),一个好的OO设计就是一个好的设计,而一个糟糕的设计则是一个糟糕的设计,而与语言无关。
使其尽可能接近Java。 它使用简单的方法,可以将1:1转换为C ++。 要更改设计,可以在以后进行,特别是如果您不熟悉C ++。
没有像Java泛型/ C ++模板这样的技术转变。
为了扩大我的原始评论以及其他人在这里发表的答案...
如果您想自学C ++,并且已经知道Java,那么两者非常相似。 因此,请根据对Java的了解来教自己C ++。
您知道如何使用Java处理IO。 查找一些文档,然后开始使用C ++练习IO,这有所不同。
您知道如何处理Java中的方法,并将其与C ++进行比较(它们实际上是相同的)。
但另一方面,如果您想关注效率,组织结构或优化,则可能应该首先使用最了解的语言来完成。 就目前情况而言,或者至少以您表达问题的方式,您似乎试图在一个范围内实现这两个目标,而选择一个或另一个并专注于此要好得多。 如果您只是简单地将代码复制并粘贴并修复Java和C ++之间的语法差异,则该代码的C ++版本实质上将与您的代码的Java版本完全相同,原始,有效且经过优化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.