1
package pkgswitch;
import java.util.Scanner;
public class Switch {
    public static void main(String[] args) {
        double subtotal = 0.0;
        Scanner sc = new Scanner(System.in);
        outerloop:
        while(0==0){
            System.out.print("Enter subtotal:   ");
            if (sc.hasNextDouble())
            {
                subtotal=sc.nextDouble();
            }
            else
            {
                sc.nextLine();
                System.out.println("Error!");
                continue outerloop;
            }
        }       
    }
}

私は例外をキャッチする方法を学んでいます。try( /については知っていますcatch

質問:

入力なしで初期化されたばかりの場合、スキャナーはどのようにしてより多くのダブルトークンを持ちますか

4

4 に答える 4

1

入力なしで初期化されたばかりの場合、スキャナーはどのようにしてより多くのダブルトークンを持ちますか?

あなたのコードは、「入力なし」でスキャナーを初期化しません。で初期化しSystem.inます。

実際に起こることはsc.hasNextDouble()、入力ストリームから文字を読み取ってバッファリングしようとすることです...ユーザーがまだ入力していない場合はブロックします。メソッドに有効なdoubleトークンがあるかどうかを判断するのに十分な文字がある場合、メソッドはtrue... またはを返しますfalse


ところで:

   while (0 == 0) {

ばかげている。しないでください。それは読者に時間を無駄にさせます:

  1. コードが実際に何をしているかを理解し、
  2. 作者が基本的な Java を理解していないのか、それともコーディング中に違法な物質を使用しているのか疑問に思っています ... :-)
于 2013-06-23T05:22:11.163 に答える
0

System.inですInputStream。javadoc から、「入力データが使用可能になるか、ストリームの終わりが検出されるか、例外がスローされるまでブロックする」を参照してください。

于 2013-06-23T05:21:12.330 に答える
0

そうではありません。これを確認してください: コードに 2 つの print ステートメントを追加しました。これを実行すると、値を入力するまで hasNextDouble() メソッドが何も返さないことがわかります。したがって、double を入力すると、hasNextDouble() は true を返し、プログラムは小計をその値に設定します (これも確かではありませんが、値を設定する代わりに小計に追加することをお勧めします)。

public static void main(String[] args) {
    double subtotal = 0.0;
    Scanner sc = new Scanner(System.in);
    outerloop:
    while(0==0){
        System.out.print("Enter subtotal:   ");
        if (sc.hasNextDouble())
        {
            System.out.println("has next double."); /* added */
            subtotal=sc.nextDouble();
            System.out.println("read double: "+subtotal);
        }
        else
        {
            System.out.println("no next double"); /* added */
            sc.nextLine();
            System.out.println("Error!");
            continue outerloop;
        }
    }
}
于 2013-06-23T05:21:37.263 に答える
0

まず第一に、while(true)よりも 持っているといいです.「小計を入力してwhile(0==0)ください」と表示されたら、doubleを指定できます(ex 3.0)sc.hasNextDouble()。その後、trueになり、ifステートメントのコードが実行されます.double(ではない入力を指定した場合ex 'k') はsc.hasNextDouble()false になり、else 内のすべてが実行されます。

于 2013-06-23T05:21:48.463 に答える