2013-09-27 6 views
0

Я сделал программу в Java a while back, которая по сути является математической викториной, она случайным образом генерирует простые математические задачи, основанные на пользовательском вводе. Теперь я преподаю себе C++, и мне просто интересно, исходя из эффективности и организации, что является лучшим способом конвертировать эту программу. Например, если мои методы являются классами, если они остаются в одном классе и т. Д. Любая помощь по этому поводу будет высоко оценена! Это мой текущий код JavaПредложения по дизайну на C++

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

} 

Следует отметить, что я знаю, что эта программа не оптимизирована, и я в порядке с этим в настоящее время

+0

Java и C++ являются объектно-ориентированными. Если вы используете только один класс для Java, я не понимаю, почему вы используете несколько классов для C++-версии того же кода. Это не значит, что для этого конкретного экземпляра один класс является наиболее эффективным способом сделать это (на любом языке), просто я не понимаю, почему вы разделили его на разные классы на C++, t сделано на другом языке ООП. – nhgrif

ответ

2

Речь идет о разработке программ. Не вдаваясь в достоинства вашей текущей программы (посмотрите на это code review), хороший дизайн OO - хороший дизайн, а плохой - плохой, независимо от языка.

+0

Мне, возможно, придется проверить это, спасибо за ответ! –

2

Держите его как можно ближе к Java. Он использует простые средства, которые могут быть переведены на 1: 1 на C++. Чтобы изменить дизайн, это можно сделать потом, особенно если вы относительно новичок в C++.

Не существует таких технических сдвигов, как Java generics/C++ templating.

0

Чтобы расширить мой оригинальный комментарий, а также ответы другие размещены здесь ...

Если вы пытаетесь научить себя C++, и вы уже знаете, Java, хорошо два довольно похожи. Поэтому преподайте C++ на основе того, что вы уже знаете о Java.

Вы знаете, как обращаться с IO в Java. Посмотрите документацию и начните практиковать IO с C++, это немного отличается.

Вы знаете, как обращаться с методами в Java, сравните это с C++ (они практически одинаковы).

Но, с другой стороны, если вы хотите сосредоточиться на эффективности, orginazation или оптимизации, вам следует начать с этого, используя любой язык, который вы знаете лучше всего. Как бы то ни было, или, по крайней мере, в том, как вы сформулировали свой вопрос, вы, кажется, пытаетесь выполнить обе эти цели в одной грани, когда было бы намного лучше выбрать тот или другой и сосредоточиться на этом. Если вы просто скопировали &, вставили свой код и зафиксировали разницу синтаксиса между Java и C++, версия кода на C++ по существу была бы точно такой же, как и была бы оптимизирована, как и Java-версия вашего кода.

Смежные вопросы