2012-03-29 12 views
1

私のJavaクラスにかなり大きな割り当てをしています。私はプログラム全体を書きましたが、最後の問題が1つありました。ユーザが入力している整数であることを確認するために、配列へのユーザ入力をチェックする必要があります。 Z、2.0、@%& @#%* @%^など)、エラーが発生した場合は、ループバックして、入力がエラーメッセージで拒否され、それらが準拠するまで繰り返さなければなりません。アレイで整合性チェックを実行していますか?

私はtry/catchを使って解決策を試したことがあると聞いていますが、私はまたしばらくはループを考えましたが、やり方はまだ分かりません。任意のヒント?

import java.util.Scanner; 
import java.util.Arrays; 

public class Assignment6 { 
    public static int getMaxValue(int[] array) { 
     int maxValue = array[0]; 
     for (int i = 1; i < array.length; i++) { 
      if (array[i] > maxValue) { 
       maxValue = array[i]; 
      } 
     } 
     return maxValue; 
    } 

    public static int getMinValue(int[] array) { 
     int minValue = array[0]; 
     for (int i = 1; i < array.length; i++) { 
      if (array[i] < minValue) { 
       minValue = array[i]; 
      } 
     } 
     return minValue; 

    } 

    public static double average(int[] array) { 
     double sum = 0, average = 0; 
     for (int i = 0; i < array.length; i++) { 
      sum = sum + array[i]; 
      average = sum/array.length; 
     } 
     return average; 
    } 

    public static double Median(int[] array) { 
     int Median = array.length/2; 
     if (array.length % 2 == 1) { 
      return array[Median]; 
     } else { 
      return (array[Median - 1] + array[Median])/2.0; 
     } 
    } 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter size of array: "); 
     int[] array = new int[input.nextInt()]; 

     for (int i = 0; i < array.length; i++) { 
      System.out.print("Enter value #" + (i + 1) + ": "); 
      array[i] = input.nextInt(); 
     } 

     System.out.println("\nYour data is:"); 

     for (int i : array) 
      System.out.print(i + "\n"); 
     System.out.println(); 

     System.out.println("Average is : " + average(array)); 

     System.out.println("Smallest value is: " + getMinValue(array)); 

     System.out.println("Largest value is: " + getMaxValue(array)); 

     System.out.println("\nYour sorted data is: "); 

     Arrays.sort(array); 

     for (int i = 0; i < array.length; i++) 
      System.out.println(array[i]); 

     double Median = Assignment6.Median(array); 
     System.out.println("\nThe median is: " + Median); 

     int Range = Assignment6.getMaxValue(array) - Assignment6.getMinValue(array); 
     System.out.println("\nThe range is: " + Range); 

     double midRange = (Assignment6.getMaxValue(array) + Assignment6.getMinValue(array))/2.0; 
     System.out.println("\nThe Midrange is: " + midRange); 
    } 
} 
+0

あなたはすでに 'nextInt'を使っていますが、これはあなたのためにチェックを実行しませんか? –

+0

'nextInt()'を使用しているので、不正な入力があれば例外がスローされます。あなたはおそらくそれを処理するべきです。 – dlev

答えて

4

もしScanner.nextInt()を使用するので、非整数入力をアレイに追加されたことは不可能です。さらに、整数でない値がint[]に入っている可能性はありません。プログラムはコンパイルされない可能性が高く、実行しても実行時例外がスローされます。


ただし、ユーザーが非整数を入力すると、プログラムがクラッシュします。配列とはまったく関係がありませんが、私はこれがあなたの質問の意味であると推測しています。安全Scannerでユーザーからのみ整数入力を読み込むための正しい方法は次のようになります。

for (int i = 0; i < array.length; i++) { 
    System.out.print("Enter value #" + (i + 1) + ": "); 

    while (!input.hasNextInt()) { // <-- 'peeks' at next token 
     System.out.println("Please enter an integer!"); 
     input.next(); // <-- skips over invalid token 
    } 

    array[i] = input.nextInt(); 
} 
+0

申し訳ありませんが、私は自分自身を十分に明確にしませんでした。 –

+0

整数エントリで動作するように設定しましたが、配列エントリで動作するようにコンフィグレーションするとエラーが発生するようです。 –

+0

@StevenHickey「配列エントリで動作する」とはどういう意味ですか? – paislee

0

また、Integer.parseInt(yourString)を使用することができますし、文字列が有効な

でない場合には、NumberFormatExceptionががスローされます
関連する問題