0

しばらく前に、本質的に数学クイズであるプログラムを作成しましたJava。これは、ユーザー入力に基づいて簡単な数学の問題をランダムに生成します。今、私は独学C++で、効率と組織に基づいて、このプログラムを変換する最良の方法は何かを考えていました。たとえば、私のメソッドはクラスである必要があり、それらは 1 つのクラスに留まる必要があります。これに関する助けがあれば大歓迎です!これは私の現在の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");
}

}

このプログラムが最適化されていないことは承知しており、当面はそれで問題ありません。

4

3 に答える 3

2

プログラムの設計についてです。現在のプログラムのメリットに立ち入ることなく (コード レビューを確認してください)、言語に関係なく、優れた OO 設計は優れた設計であり、悪い設計は悪い設計です。

于 2013-09-27T13:58:41.470 に答える
2

できるだけJavaに近づけてください。これは、1:1 で C++ に変換できる単純な手段を使用します。設計を変更するには、特に C++ に比較的慣れていない場合は、後で行うことができます。

Java ジェネリック / C++ テンプレートのような技術シフトはありません。

于 2013-09-27T14:05:37.917 に答える
0

私の元のコメントと、他の人がここに投稿した回答を拡張するには...

C++ を独学しようとしていて、すでに Java を知っている場合、この 2 つはよく似ています。したがって、Java について既に知っていることを基に、C++ を独学してください。

Java で IO を処理する方法を知っている。ドキュメントを調べて、C++ で IO の練習を始めてください。これは少し異なります。

Java でメソッドを処理する方法を知っています。それを C++ と比較してください (実質的に同じです)。

しかし反対に、効率、組織化、または最適化に関心を持ちたい場合は、おそらく、自分が最もよく知っている言語でそれを行うことから始めるべきです。現状では、または少なくともあなたの質問の言い回しでは、どちらかを選択してそれに集中する方がはるかに良いのに、これらの目標の両方を一度に達成しようとしているようです。コードを単純にコピーして貼り付け、Java と C++ の構文の違いを修正した場合、C++ バージョンのコードは、基本的に Java バージョンのコードとまったく同じように編成され、効率的で、最適化されます。

于 2013-09-27T14:11:36.223 に答える