簡體   English   中英

教孩子簡單加減法的Java程序

[英]Java program that teaches kid simple addition and subtraction

我覺得代碼差不多了,但問題是 while 循環我不允許在這個程序中使用 break 和 continue 語句。 第一個輸出測試它假設有 14 個問題,你得到 12 對和 2 錯給你 86%。 至於第二次考試,你會得到滿分,而最后一次考試會帶你做 20 道題,這是最大問題數,前 8 題中有 4 題正確,前 8 題中有 4 題不正確,然后接下來的 12 題正確給你80% 代碼如下:

package proj3;

    import java.util.Scanner;
    
    public class Project4App {
        
        public static void main(String[] args) {
            Scanner scnr = new Scanner(System.in);
            int correctNum = 0;
            int wrongNum = 0;
            double percent = 0;
            int subNumCorrect = 0;
            int subNumWrong = 0;
            int addNumCorrect = 0;
            int addNumWrong = 0;
            int totalQuestions = 0;
            
            
            while(!(correctNum == 10 && totalQuestions == 10) && !(percent >= 85.0 && totalQuestions >= 10) && (totalQuestions != 20)) {
                Question Quest = new Question();
                
                System.out.println("What is the result?" + "\n" + Quest.toString());
                int userInt = scnr.nextInt();
                
                if((Quest.getOperator() == '+') && (userInt == Quest.determineAnswer())) {
                    addNumCorrect += 1;
                }
                else if(Quest.getOperator() == '+' && (userInt != Quest.determineAnswer())) {
                     addNumWrong += 1;
                }
                
                if((Quest.getOperator() == '-') && (userInt == Quest.determineAnswer())) {
                    subNumCorrect += 1;
                }
                else if((Quest.getOperator() == '-') && (userInt != Quest.determineAnswer())) {
                     subNumWrong += 1;
                }
                   
                if(userInt == Quest.determineAnswer()){
                    correctNum += 1;
                    System.out.println("Congratulations, you got it correct!");
                }
                else if (userInt != Quest.determineAnswer()){
                    wrongNum += 1;
                    System.out.println("The correct answer for " + Quest.toString() + " is " + Quest.determineAnswer());
                }
                
                totalQuestions++;
                
                percent = Math.round((double)(correctNum * 100) / (totalQuestions));
                }
                
                System.out.println("\nProgress Report: " + "\nAddition:\nYou got " + addNumCorrect + " correct and " + addNumWrong + " incorrect.");
                System.out.println("Progress Report: " + "\nSubtraction:\nYou got " + subNumCorrect + " correct and " + subNumWrong + " incorrect.");
                System.out.println("The percent correct: " + percent + "%");
                
                
                scnr.close();
            }
        }

我認為這在很大程度上可以滿足您的需求。 許多計數器沒有按預期進行修改。 這部分是由於您的主要方法中發生的數量使得很難看到發生了什么(信息太多)。 我已經將功能提取到更小、更明確的方法中。

你有很多邏輯有效地說你希望用戶在回答至少 10 個問題時達到 85% - 並在提出 20 個問題時停止。 您可以將此條件isGameComplete(totalQuestions)為返回boolean isGameComplete(totalQuestions) ,並將其放入while條件表達式中。

我冒昧地根據我認為實現意圖的功能實現了一個問題類。

correctPercent被四舍五入為整數,這使得 == 不可能達到 85.5%。 我已將其轉換為double因此如果您獲得超過85% ,例如85.25% ,則游戲成功完成。

可能我已經添加了一些其他的東西,如果重要的話,我已經嘗試在線評論。 希望這就是你所追求的。

如果它變得太難理解,將小塊代碼提取到命名良好的方法(甚至是長的)中會大有幫助,因為它可以減輕您的心理負擔。

class Project4App {

    static final Scanner scanner = new Scanner(System.in);
    static int correctNum = 0;
    static int wrongNum = 0;
    static int subNumCorrect = 0;
    static int subNumWrong = 0;
    static int addNumCorrect = 0;
    static int addNumWrong = 0;
    static int totalQuestions = 0;
    static double percentCorrect = 0;

    public static void main(String[] args) {
        /**
         * answer at least 9/10 questions correctly (to get 85%)
         */
        while (percentCorrect < 85.0 && totalQuestions >= 10 && totalQuestions <= 20) {
            Question question = new Question();

            int userInt = getUsersAnswer(question);
            boolean isCorrect = question.determineAnswer(userInt);
            updateStatistics(question, isCorrect);
            printResults(); // can remove this/comment this out - added to help with debugging
        }

        System.out.println();
        System.out.println("------------ Game Complete! ------------");
        printResults();
    }

    private static void printResults() {
        System.out.println("\nProgress Report: " + "\nAddition:\nYou got " + addNumCorrect + " correct and " + addNumWrong + " incorrect.");
        System.out.println("Progress Report: " + "\nSubtraction:\nYou got " + subNumCorrect + " correct and " + subNumWrong + " incorrect.");
        System.out.println("The percent correct: (" + (addNumCorrect+subNumCorrect) + "/" + totalQuestions +") " + percentCorrect + "%");
        System.out.println("The percent wrong: (" + (addNumWrong+subNumWrong) + "/" + totalQuestions +") " + (100 - percentCorrect) + "%");
    }

    private static int getUsersAnswer(Question question) {
        System.out.println("What is the result?" + "\n" + question.toString());
        int userInt = scanner.nextInt();
        return userInt;
    }

    public static void updateStatistics(Question question, boolean isCorrect){
        if (question.getOperator() == '+') {
            if (isCorrect) {
                addNumCorrect++;
                correctNum++; // newly added (wasn't updated)
            } else {
                addNumWrong++;
                wrongNum++; // newly added - unused variable originall
            }
        } else { // operator is '-'
            if (isCorrect) {
                subNumCorrect++;
                correctNum++; // newly added (wasn't updated)
            } else {
                subNumWrong++;
                wrongNum++; // newly added - unused variable originall
            }
        }
        totalQuestions++; // newly added
        percentCorrect = (correctNum * 100) / totalQuestions;
    }
}

class Question {

    private static final int UPPER_LIMIT_ON_RANDOM_NUMBERS = 20;
    private static final Random random = new Random();
    private final int number1;
    private final int number2;
    private final char operator;

    public Question() {
        operator = Math.random()>0.5 ? '+' : '-';
        number1 = random.nextInt(UPPER_LIMIT_ON_RANDOM_NUMBERS); // NOTE THE SUBTRACTION NUMBER COULD BE NEGATIVE IF number2
        number2 = random.nextInt(UPPER_LIMIT_ON_RANDOM_NUMBERS); // IS GREATER THAN number1.
    }

    public char getOperator() {
        return operator;
    }

    public boolean determineAnswer(int userAnswer) {
        switch (operator) {
            case '+':
                return userAnswer == (number1 + number2);
            case '-':
                return userAnswer == (number1 - number2);
        }
        return false; // shouldn't end up here - would be better to throw an unchecked exception and crash the program - new RuntimeException()
    }

    @Override
    public String toString() {
        return number1 + " " + operator + " " + number2;
    }
}

輸出:

------------ Game Complete! ------------

Progress Report: 
Addition:
You got 7 correct and 0 incorrect.
Progress Report: 
Subtraction:
You got 2 correct and 1 incorrect.
The percent correct: (9/10) 90.0%
The percent wrong: (1/10) 10.0%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM