0

私は2つのプログラムを持っています:

Score.java は次のように設定されています。

  • キーボードからスコアを読み取り、その平均を出力します。
  • スコアは数値で、小数部分が含まれる場合があります。

たとえば、スコアは 8.73 などです。異なるコンテストには、異なる数の審査員がいます。ユーザーが「完了」と入力するまで、スコアを求めて読み込み続けます。次に、プログラムは合計スコア、スコアの数、および平均スコアを出力します。次に、プログラムはユーザーに、さらに競技者がいるかどうかを確認するように求めます。スコアのプロンプトが再び表示される場合があります。それ以上ない場合はプログラムを終了してください。"N"を入力するとプログラムを停止するように設定し、"Y"を入力すると将来のエントリを計算に追加するように設定しました。

import java.util.Scanner;

// This is the Score program
// Written by me

public class Score
{
    public static void main(String args[])
    {
        Scanner game = new Scanner(System.in);
        double num = 0.0;
        double sum = 0.0;
        int cnt = 0;

        while (true)
        {
            System.out.println("Enter as many non-negative integers as you like ");
            System.out.println("one at a time and I will find the average");
            System.out.println("Enter done to stop entering numbers");

            System.out.print("enter number: ");
            String ans = game.next();
            while (!ans.equals("done"))
            {
                num = Double.parseDouble(ans);
                sum = sum + num;
                cnt = cnt + 1;

                System.out.print("enter number: ");
                ans = game.next();
            }
            System.out.println(cnt);
            System.out.println(sum);

            System.out.println("Total Score " + sum + " count scores " + cnt + " avg score " + sum / cnt);

            System.out.println("Enter another contestant (Y/N)?");
            String str = game.next();
            if (!str.equals("Y"))
                break;
        }
    }
}

上記のプロセスは機能しますが、「Y」と入力してスコアを追加した後、2 番目のプログラム Olympic.java が正しく機能しません。代わりに、以前の計算に追加する代わりに、まったく新しい平均の計算を開始します。

import java.util.Scanner;

// This is the Olympic program
// Written by me

public class Olympic
{
    public static void main(String args[])
    {
        Scanner game = new Scanner(System.in);
        double num = 0.0;
        double sum = 0.0;
        int cnt = 0;
        double highscore = Double.MAX_VALUE;
        double lowscore = Double.MIN_VALUE;

        while (true)
        {
            System.out.println("Enter as many non-negative integers as you like ");
            System.out.println("one at a time and I will find the average");
            System.out.println("Enter done to stop entering numbers");

            System.out.print("enter number: ");
            String ans = game.next();
            lowscore = game.nextDouble();
            highscore = game.nextDouble();
            while (!ans.equals("done"))
            {
                num = Double.parseDouble(ans);
                sum = (sum + num) - lowscore - highscore;
                cnt = cnt + 1;

                System.out.print("enter number: ");
                if (num > highscore)
                {
                    highscore = num;
                }
                if (num < lowscore)
                {
                    lowscore = num;
                }
                ans = game.next();
            }
            System.out.println("Throwing out low score " + lowscore + " and high score " + highscore);
            System.out.println("Total Score " + sum + " count scores " + cnt + " avg score " + sum / cnt);

            System.out.println("Enter another contestant (Y/N)?");
            String str = game.next();
            if (!str.equals("Y"))
                break;
        }
    }
}
4

1 に答える 1

0

だから私は本当に簡単なテストをしました

public static void main(String[] args) {

    Scanner game = new Scanner(System.in);

    while (true) {

        System.out.println("Enter another contestant (Y/N)?");
        String str = game.next();
        if (!str.equalsIgnoreCase("Y")) {
            break;
        }
    }

    System.out.println("I'm free");

}

そして、これはうまく終了します。

あなたの2番目の問題について。あなたの論理は少し歪んでいると思います。次のようなものを試すことができます...

Scanner game = new Scanner(System.in);

double num = 0;
double sum = 0;
int cnt = 0;

while (true) {
    System.out.println("Enter as many non-negative integers as you like ");
    System.out.println("one at a time and I will find the average");
    System.out.println("Enter done to stop entering numbers");

    double lowscore = Double.MAX_VALUE;
    double highscore = 0;

    System.out.print("enter number: ");
    String ans = game.next();
    while (!ans.equals("done")) {

        num = Double.parseDouble(ans);

        lowscore = Math.min(lowscore, num);
        highscore = Math.max(highscore, num);

        sum += num;
        cnt++;

        System.out.print("enter number: ");
        if (num > highscore) {
            highscore = num;
        }
        if (num < lowscore) {
            lowscore = num;
        }
        ans = game.next();
    }

    sum -= lowscore;
    sum -= highscore;

    System.out.println("Throwing out low score " + lowscore + " and high score " + highscore);
    System.out.println("Total Score " + sum + " count scores " + cnt + " avg score " + sum / cnt);

    System.out.println("Enter another contestant (Y/N)?");
    String str = game.next();
    if (!str.equalsIgnoreCase("Y")) {
        break;
    }
}

これは出力されます...

Enter as many non-negative integers as you like 
one at a time and I will find the average
Enter done to stop entering numbers
enter number: 1
enter number: 2
enter number: 3
enter number: 4
enter number: 5
enter number: 6
enter number: 7
enter number: 8
enter number: 9
enter number: 10
enter number: done
Throwing out low score 1.0 and high score 10.0
Total Score 44.0 count scores 10 avg score 4.4
Enter another contestant (Y/N)?
y
Enter as many non-negative integers as you like 
one at a time and I will find the average
Enter done to stop entering numbers
enter number: 1
enter number: 12
enter number: 13
enter number: 14
enter number: 15
enter number: 16
enter number: 17
enter number: 18
enter number: 19
enter number: 20
enter number: done
Throwing out low score 1.0 and high score 20.0
Total Score 168.0 count scores 20 avg score 8.4
Enter another contestant (Y/N)?
n

あなたの例外について。を使用Scanner.nextDoubleする場合、入力が double として解析できない場合、例外がスローされます。この状況に適切に対処する必要があります...

于 2012-09-25T03:29:11.887 に答える