0

以下の問題に関する追加のクレジットの質問がわかりません。私は既に try-catch ステートメントを実装しており、正常に動作しているように見えますが、インストラクターは、データ !=0booleanの代わりにループ条件で変数を使用することを望んでいます。私は推測しています:

while(data!=0.0)

しかし、それはどのように機能しますか?私はそれを完全に取り除き、booleanすでに作成したものを使用するだけですか? PS: これは非常に単純かもしれませんが、私はそれを見ていません。

import java.util.*;

public class SumInput {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        double data = 1.0;
        double sum = 0.0;
        boolean valid = false;
        while (!valid) {
            try {
                while (data != 0.0) {
                    System.out.print("So far, sum = " + sum
                       + "\nEnter a number or 0 to exit: ");
                    data = input.nextDouble();
                    sum = sum + data;
                    valid = true;
                }
            } catch (InputMismatchException e) {
                System.out.println("Error--please enter a double number");
                input.next();
            } catch (NoSuchElementException e) {
                System.out.println("\nGoodbye!");
                System.exit(0);
            }
        }
        System.out.println("Ending sum: " + sum);
    }
}
4

4 に答える 4

2

インストラクターが期待していたように、(data != 0.0) の代わりにブール値を使用するようにプログラムを更新しました。以下のプログラムを見つけてください。

import java.util.*;

public class SumInput {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        double data = 1.0;
        double sum = 0.0;
        boolean valid = false;
        while (!valid) {
            try {
                while (true) {
                    System.out.print("So far, sum = " + sum
                            + "\nEnter a number or 0 to exit: ");
                    data = input.nextDouble();
                    sum = sum + data;
                    valid = true;
                    if (data == 0.0) {
                        break;
                    }
                }
            } catch (InputMismatchException e) {
                System.out.println("Error--please enter a double number");
                input.next();
            } catch (NoSuchElementException e) {
                System.out.println("\nGoodbye!");
                System.exit(0);
            }
        }
        System.out.println("Ending sum: " + sum);
    }
}

それがあなたの問題を解決することを願っています!

于 2013-04-16T08:27:43.370 に答える
1

私は彼が望んでいると想像します

public class SumInput {
    public static void main(String... ignored) {
        Scanner input = new Scanner(System.in);
        double sum = 0.0;
        while (true) {
            System.out.println("So far, sum = " + sum);
            System.out.print("Enter 'exit' to exit: ");
            if (!input.hasNextDouble())
                break;
            sum += input.nextDouble();
        }
        System.out.println("Ending sum: " + sum);
    }
}

のように走る

So far, sum = 0.0
Enter 'exit' to exit: 122
So far, sum = 122.0
Enter 'exit' to exit: 232.2
So far, sum = 354.2
Enter 'exit' to exit: 322
So far, sum = 676.2
Enter 'exit' to exit: exit
Ending sum: 676.2

0.0 が最後の値ではない値を合計したい場合があるため、これはより明確で安全です。

このループを使用すると、現在持っているコードの多くを削除できます。

于 2013-04-16T08:14:29.893 に答える
0

==特にorでは、 double を論理 (停止) 条件として使用しないでください!=

コードの 1 つの問題は、data == 0.0特に計算を実行する場合に、この表現を double にするのが非常に難しいことです。これは表現エラーによるものです

を使用する0と、停止条件としてユーザー出力からそれを削除しEnter、ループを終了する唯一の方法としてキーのみを残します。

于 2013-04-16T08:39:06.430 に答える
0
boolean valid = true;
while (valid) {
    if((data =input.nextDouble()) != 0.0)
        valid = true;
    else
       valid = false;

// perform your calculation.
}
于 2013-04-16T08:17:18.807 に答える