1

基本的に、for ループを使用して多次元配列にユーザー入力を格納しようとしています。ユーザーが想定外または意図しない値 (例: 0 未満) を入力すると、警告メッセージが表示され、ループは次の有効な整数を受け取るまで「待機」するのが理想的です。

現在、以下に示すように私のコードは正常に動作しますが、これを行うためのより良い/より最適化された方法があるかどうか疑問に思っています。

for (int row = 0; row < array.length; row++) {
    for (int column = 0; column < array[row].length; column++) {
        int number = input.nextInt();
        if((input.nextInt() >= 0) {
            array[row][column] = number;
        } else {
            System.out.println("Input must be > 0.");
            column--;
        }
}
4

4 に答える 4

2

ループを使用してdo..while、ユーザーが有効なものを入力するまで待機します。これは、ループ カウンターを変更するよりもクリーンです。

for (int row = 0; row < array.length; row++) {
        for (int column = 0; column < array[row].length; column++) {
            bool hasEnteredValidInput = false;
            do
            {
               int number = input.nextInt();
               if(number  >= 0) {
                  array[row][column] = number;
                  hasEnteredValidInput = true
               } else {
                  System.out.println("Input must be > 0.");
               }
            } while (!hasEnteredValidInput);
        }
    }

さらに良いのは、読み取りコードを独自の関数に抽出することです。

for (int row = 0; row < array.length; row++) {
        for (int column = 0; column < array[row].length; column++) {
             array[row][column] = readValidInputFromUser();   
        }
 }

 public string readValidInputFromUser()
 {
    while(true)
    {
           int number = input.nextInt();
           if(number >= 0) {
              return number;
           } else {
              System.out.println("Input must be > 0.");
           }
    }
 }

このバージョンでは、何をしているのかが非常に明確になります。

于 2012-05-06T03:49:50.047 に答える
1

それはほとんどそれを行う方法です。while ループに変換できますが、そうする理由はありません。

int column = 0;
while ( column < array[row].length) {
        int number = input.nextInt();
        if((input.nextInt() >= 0) {
            array[row][column] = temp;
            ++column;
        } else {
            System.out.println("Input must be > 0.");
        }
}
于 2012-05-06T03:48:15.350 に答える
1

ユーザーが無効な入力を何回入力するかわからないため、これは while ループを使用する典型的な例です。

これを試して:

for (int row = 0; row < array.length; row++) {
    for (int column = 0; column < array[row].length; column++) {
        int number = input.nextInt();
        if(number >= 0) {
            array[row][column] = temp;
        } 
        else 
        {
            while(number < 0)
            {
                System.out.println("Input must be > 0.");
                number = input.nextInt();
            } 
        }
}

また、if ステートメントを変更したことに注意してください。input.nextInt()再度number呼び出すnextInt()と、スキャナーにフックした入力ストリームから読み取られるためです。

于 2012-05-06T03:50:22.057 に答える
0

その特定の条件でループコードで宣言します。そして、あなたはまさにそれをしたようですcolumn--

また、現在の for ループで次のようにすることもできます。

for (int row = 0; row < array.length; row++) {
    for (int column = 0; column < array[row].length; column++) {
        int number;
        do {
            number = input.nextInt();
            if(number<0)  System.out.println("Number should be >= 0, enter again");
        }while(number<0);
        array[row][column] = number;

    }
}
于 2012-05-06T03:47:43.403 に答える