2

Java 数学トレーニング プログラムを作成しようとしています。私は Javascript の作業バージョンを持っており、何人かはすでに Java への変換を手伝ってくれました。ユーザーに難易度を尋ねることになっています (質問の各数字にその桁数を使用します)。次に、どのタイプの計算を行うか (加算、減算、乗算、除算、ランダム) をユーザーに尋ねます。次に、ユーザーに 10 個の質問をします。ユーザーが答えると、それが正しいか間違っているかが示されます。間違っている場合は、質問を続けます。10 問の質問の最後に、75% 以上正解したかどうかを計算し、適切な回答を表示します。完全な手順:

ここに画像の説明を入力

最終的には、ほとんどが正しく機能するようになりましたが、数学自体が間違っていることがわかりました。難易度 2 を入力すると、1 桁しか表示されないことがあります (基本的に、難易度は正しく計算されません)。また、いつも私の計算が間違っていると言われます。ロジックに問題があることを発見できる可能性はありますか?

助けてくれてありがとう。

import java.util.*;
import javax.swing.JOptionPane;

public class Assignment2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        int difficulty = 1;
        String[] operators = {"plus", "minus", "times", "divided by"};
        int selectedOperator = 1;
        int correctAnswers = 0;
        int answeredTyped = 0;

        int difficultyInput = Integer.parseInt(
            JOptionPane.showInputDialog(
                "Please choose the difficulty. " + 
                    "Enter the number of digits to use in each problem."));

        if (difficultyInput > 0) {
            difficulty = difficultyInput;
        }
        int arithmeticMethod = Integer.parseInt(
            JOptionPane.showInputDialog(
                "Choose an arithmetic problem to study: " +
                    "1 = Addition Only, 2 = Subtraction Only, " +
                        "3 = Multiplication Only, 4 = Division Only, " +
                            "5 = Random Problems" ));

        selectedOperator = arithmeticMethod;
        new Assignment2().askQuestion(
                difficulty, null, arithmeticMethod,
                arithmeticMethod, operators, arithmeticMethod); 
    }

    public static boolean checkResponse (
            int primaryInt, int secondaryInt,
                String operatorText, float response){
        boolean result = false;
        switch (operatorText) {
            case "1":
                return (primaryInt + secondaryInt) == response;
            case "2":
                return (primaryInt - secondaryInt) == response;
            case "3":
                return (primaryInt * secondaryInt) == response;
            case "4":
                return (primaryInt / secondaryInt) == response;
        }
        return false;
    }

    public static String displayResponse (boolean isCorrect) {
        int randomIndex = (int) (Math.floor(Math.random() * (4 - 1 + 1)) + 1);
        switch (randomIndex) {
            case 1:
                return isCorrect ? "Very Good!" : "No. Please try again.";
            case 2:
                return isCorrect ? "Excellent!" : "Wrong. Try once more.";
            case 3:
                return isCorrect ? "Nice Work!" : "Don\'t give up!";
            case 4:
                return isCorrect ? "Keep up the good work!" : "No. Keep trying.";
        }
        return "Oops...";
    }

    public static void askQuestion(
            int difficulty, String operatorText,
            int selectedOperator, int answeredTyped,
            String[] operators, int correctAnswers) {
        boolean correctAnswer = false;
        int primaryInt = (int) Math.floor(Math.pow(10,  difficulty-1) + Math.random() * 9 * Math.pow(10,  difficulty-1));
        int secondaryInt = (int) Math.floor(Math.pow(10,  difficulty-1) + Math.random() * 9 * Math.pow(10, difficulty-1));
        operatorText = (selectedOperator == 5) ? operators[(int) Math.floor(Math.random() * operators.length)] : operators[selectedOperator - 1];

        while(!correctAnswer && answeredTyped < 10) {
            float response = Float.parseFloat (JOptionPane.showInputDialog("How much is " + primaryInt + " " + operatorText + " " + secondaryInt + "?")); 
            correctAnswer = checkResponse (primaryInt, secondaryInt, operatorText, response);
            JOptionPane.showMessageDialog(null, displayResponse(correctAnswer));

            answeredTyped++;

            if(correctAnswer)
            correctAnswers++;
        }
        {
            while(answeredTyped < 10) {
                askQuestion(0, null, 0, 0, null, 0);
            }
            if((correctAnswers / answeredTyped) >= 0.75) {
                JOptionPane.showMessageDialog(
                    null, "Congratulations, you are ready to " +
                    "go on to the next level!");
            } else {
                JOptionPane.showMessageDialog(
                    null, "Please ask your teacher for extra help.");
            }
        }
    }
}
4

1 に答える 1

2

あなたが行ったaskQuestionを呼び出しているコードで

new Assignment2().askQuestion(arithmeticMethod, null, arithmeticMethod, arithmeticMethod, operators, arithmeticMethod);
}

しかし、メソッド定義を見ると、難易度の代わりに arthmeticMethod を渡しているはずです

new Assignment2().askQuestion(difficulty, null, arithmeticMethod, arithmeticMethod, operators, arithmeticMethod);
}
于 2013-09-28T04:42:07.683 に答える