-3

はい、ここにはたくさんの方法があることを知っています。課題の一部です。このコードでは、合計が 100 以下の数値が入力された場合に「平均」出力が間違っていることを除いて、すべてが意図したとおりに機能します。例: 8,10,19 を入力し、0 を入力して出力を終了すると、count 3 sum 37 average 9.25.... 平均は 12.3333 になります。ここで、8、10、99 を入力すると、出力はカウント 3 合計 117 と平均 39 になり、これは正しいです。sum>100 で動作するのに、sum<=100 で動作しないのはなぜですか? 理解できません。私は何が欠けていますか?

public static void main(String[] args) {
    //Use Main Method for gathering input
    float input = 1;
    // Declare variable for sum
    float theSum = 0;
    // Declare variable for average
    float average = 0;
    // Declare variable for counting the number of user inputs
    int counter = 0;
    /* Initialize the while loop using an input of 0 as a sentinel value
     * to exit the loop*/
    while (input != 0) {
        if (input!=0){
            counter++;
        }
        input = Float.parseFloat(
                JOptionPane.showInputDialog(
                null, "Please enter a number.  Enter 0 to quit: "));
        // Invoke sum method and pass input and summation to sum method


        theSum = (sum(input, theSum));
        if (theSum > 100)
        {
            JOptionPane.showMessageDialog(null, "The sum of your numbers "
                    + "are greater than 100!");
            break;
        }
    }
        // Invoke display method and pass summation, average, and counter variables to it
                average = (avg(theSum, counter));    
                display(theSum, average, counter);
    }


public static float sum(float num1, float sum) {
    //Add the user's input number to the sum variable
    sum += num1;
    //Return value of sum variable as new summation variable
    return sum;
}

public static float avg(float num1, float num2) {
    //Declare and initialize variable for average
    //Calculate average
    float average = num1 / num2;
    //Return value of average variable
    return average;
}

public static void display(float sum, float average, int counter) {

    /* I am subtracting 1 from variable counter so as not to include the sentinel value
     * of 0 that the user had to enter to exit the input loop in the overall count*/

    // Display the count, sum, and average to the user
    if (sum > 100) {
        JOptionPane.showMessageDialog(null, "Count = " + (counter) + ", Sum = " + sum + ", Average = " + average);
    }
    if (sum <= 100) {
        JOptionPane.showMessageDialog(null, "Count = " + (counter - 1) + ", Sum = " + sum + ", Average = " + average);
    }

}

}

4

3 に答える 3

4

その理由はwhile、合計に応じてさまざまな方法でループを終了しているためです。合計が 100 未満の場合は、数値0を入力して「終了」しても、余分な時間をループします。正直なところ、ループ全体を完全に再構築する必要があります。ループは、do...while読み取りとデバッグがはるかに簡単になります。

于 2013-09-15T00:42:02.347 に答える
0

あなたのカウンターは必要以上に 1 大きい。で割れ(counter - 1)ば直ります。

于 2013-09-15T00:41:04.560 に答える