2013-09-27 245 views
0

我做了一個Java的程序,它基本上是一個數學測驗,它根據用戶輸入隨機生成簡單的數學問題。現在,我在教導自己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++將它分成不同的類,在另一種OOP語言中是這樣做的。 – nhgrif

回答

2

這是關於程序設計。不考慮你目前的計劃的優點(查看code review),一個好的OO設計是一個好設計,壞設計是壞的,不管語言如何。

+0

我可能要檢查一下,謝謝你的迴應! –

2

保持與Java的距離。它使用簡單的方法,可以1:1轉換爲C++。 要改變設計,可以在之後完成,特別是如果你對C++比較陌生。

沒有像Java泛型/ C++模板的技術變化。

0

要在我原來的評論擴大以及回答其他人張貼在這裏...

如果你想自學C++,你已經知道Java的,還有兩個是相當similiar。所以,根據你對Java的瞭解,自學C++。

你知道如何處理Java中的IO。查看一些文檔,並用C++開始練習IO,這有點不同。

你知道如何處理Java中的方法,並將其與C++進行比較(它們實際上是相同的)。但是另一方面,如果您想關注效率,組織或優化,您應該先用最熟悉的語言開始。就目前情況而言,或者至少在你說出你的問題的方式中,你似乎試圖在一個單一的界限中完成這兩個目標,當選擇一個或另一個來關注它時會更好。如果您只是複製&粘貼代碼並修復了Java和C++之間的語法差異,則代碼的C++版本將基本上與您的代碼的Java版本一樣精確,高效和優化。