2017-07-25 3 views
2

私は、ユーザーからの整数を受け取り、配列に格納してから、配列の平均を計算するプログラムを作成しています。Ctrl + Zを押して入力を要求する方法を教えてください。

アレイは最大100の整数を保持できます。ユーザーが100未満をしたい場合は、数字の入力を求める停止するCTRL +Z(またはコマンド + Dを)打ちます。

はここに私のメインのメソッドです:

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

    int [] array = new int[100]; 
     System.out.printf("Enter a stream of numbers: "); 
     readIntoArray(input, array); 
     for (int i = 0; i<=array.length;i++) { 
      array[i] = input.nextInt(); 
     } 
    } 

そして、ここで配列に読み込む方法です。

public static int readIntoArray(Scanner input, int[] nums) { 
    int count = 0; //number of elements entered into the array 
    while (count <= nums.length && input.hasNextInt()) { 
     nums[count]=input.nextInt(); 
     count++;   
    } 
    return count; 
} 

平均的な方法です。

public static void printAboveAverage(int[] nums, int size) { 
    double average; 
    int sum = 0; 

    for (int i = 0; i < nums.length; i++) { 
     sum =+ nums[i]; 
    } 

    average = sum/size;  
    System.out.print(average); 

私は間違っていますか?

私はすぐにCTRL +Zを打った後NoSuchElementExceptionを得続けます。

+0

キープレスを処理するコードが表示されないので、少し戸惑っています。あなたはそれを省略しましたか?または、JavaプログラムでCTRL + Zのデフォルトの標準化された動作がいくつかありますか? – domsson

+2

@domssonいいえ、明らかにそうではありません。 CTRL + Zは入力ストリームを閉じ、それはJavaではなくOSによって処理されます。 – Tom

+0

初心者のための素敵な質問!しかし、記録のために:理想的には、私たちは[mcve] ...コードを与えて、コンパイル/実行することができます。その意味で、完全なクラスを含むために、入力を改善することができます。だから私はコピー/貼り付け/実行するだけです。 – GhostCat

答えて

3

while (count <= nums.length && input.hasNextInt()) { 

このループは、おそらくあなたは、Ctrl-Zキーとを打ったとき、それ以上のintあり停止することはありません。しかし、次の文は次のようになります。つまり

array[i] = input.nextInt(); 

:スキャナは入力を持つ停止した場合、十分な数字は、またはにある場合、正しくチェックするを思わあなたの読み取り方法。

しかし、あなたの主な方法はそれを無視し、スキャナから別の番のを求めます。

だから、単純な方法でもいいでしょう。メインメソッド内でforループを削除するだけで、より多くの番号が必要になります。

+0

これはエラーをスローして停止しました!ありがとうございました! – VersaceVerac

+0

ご協力いただきありがとうございます!はい、私は完全に理解しています。本当にありがとう! – VersaceVerac

+0

私はそれを聞いてうれしく思います...そして、私はあなたの古い質問に付け加えた他の答えについて考えさせてください。 – GhostCat

-1

例外がある場合は試してみることをお勧めします。無制限の数字を取得するために使用します(最大100の数字を使用しないでください)。例外を見つけたら、平均を数えます。ただ、大声で考えて

try{ 
    //Get the numbers 
} 
catch(Exception e){ 
    //Calculate the average 
} 

、それはあなたを助けることがあります。

ない最善の解決策は、excpetionを常に使用することを意味しない、おかげでリマインダーのためのような

何かをdomssonします。ここで

+0

例外は例外的な状況です。通常のプログラムフローには使用しないでください。 – domsson

+0

あなたは正しいと言いましたが、それは最良の解決策ではありませんが、うまくいくかもしれません。 – Ash

+1

「ベストではない」ソリューションだけではありません。それは欠けている問題の理解を回避するための貧弱な試みです。しかし、あなたは問題を回避することはできません。あなたがそれらを理解してから修正するまで、あなたは掘り起こします。 – GhostCat

関連する問題