2016-11-30 18 views
0

私は配列を練習しており、ユーザーがリストに入力したリストの各要素を出力しようとしています。私は最後のfor-loopで問題を抱えています。私は何が間違っているのか分かりません。 *私はJavaソロを学んでいます。配列内の各要素を印刷する

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

    int[] arr; 
    arr = new int[length]; 


    //Asks the user to input values into a list 
    for (int counter = 0; counter < length; counter++){ 
     System.out.println("Enter number into list: "); 
     int number = input.nextInt(); 

     arr[counter] = number; 

    }//end of for- 


    System.out.println("The list is below: "); 
    System.out.printf("%s%8s\n", "Index", "Entry"); 

    //ERROR: This is where the error occurs!!!!! 
    //Displays the list to the user 
    for (int count: arr){ 
     System.out.printf("%d%8d\n" 
       , count, arr[count]); 
    }//end of for- 
}//end of main method 

EDIT:パブリックカウント変数を追加して自分のコードを修正しました。最後のfor-loopでその変数を呼び出すなど、より良い方法があればPLS LMK !!

+0

'ERROR:

あなたはこのような何かを行うことができ、インデックスを印刷するには、エラーが発生する。これは!!!!!ある'と、エラーがありますか...? – tnw

+0

@tnwスレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException:122 \t at initarray.InitArray.main(InitArray。java:36)*(122は最初に入力した数字です) –

+1

配列のインデックスを使用していないので、それは 'nextInt()'で埋め尽くされた値ですが、 – Jordy

答えて

0
//ERROR: This is where the error occurs!!!!! 
//Displays the list to the user 
for (int count: arr){ 
    System.out.printf("%d%8d\n" 
      , count, arr[count]); 
}//end of for- 

これは正しくありません。値が[1, 2, 300]の配列があるとします。あなたのコードになるだろう出力は次のようになります。

  • 1, 2
  • 2, 300
  • Index error

あなたがarr[count]を呼び出しているので、これは、ある私の例では、カウントは300になるので、あなた配列内のインデックス300にアクセスしようとしますが、存在しません。あなたが探していることは次のとおりです。

for(int index : arr) { 
    System.out.println(index); 
} 

これはあなたのarr内のすべての要素を出力します。あなたはそのインデックスのインデックスと、対応する値を印刷したい場合には、そのようにループのために定期的に実行する必要があります。

for(int i = 0; i < arr.length; i++) { 
    System.out.println(i + " " + arr[i]); 
} 
+0

さて、私は拡張forループを使ってインデックスを表示できないと思った。私はあなたの答えをupvote –

+0

別の変数を使用していない限り、あなたは正しいです。 for-eachループは、データにアクセスし、インデックス番号を気にしないときに便利です。 – user123

0

拡張されたforループは値を反復処理します。インデックス自体は暗黙的でアクセス可能ではありません。

は、おそらくこのような何かしたい:

for (int i = 0; i < arr.length: arr++){ 
    System.out.printf("%d%8d\n", i, arr[i]); 
} 

を...またはあなたが使用したい場合は拡張forループ:

for (int value : arr){ 
    System.out.printf("%d\n", value); 
} 

...しかし、あなたは、インデックスを持っていません。 。

+0

* for(x:array)フォームに慣れてください。ちょうど良くなる。私は何が間違っているのかよくわからない –

0

これは、あなたが変更する必要があるすべてである:

​​

ここでのカウントは、実際に配列に入れた値を表示します。

だから、あなたが入力として12、13、14を入力した場合、このカウントは、配列の長さがより異なっているあなたが取る最初に入力されている12、13、および14

が表示されます配列入力。

int c =0; 
for (int count: arr){ 
    System.out.println(c); 
    System.out.println(count); 
    c++; 
} 
+0

ええ、インデックスは表示されません。 –

+0

@DavidBang私の更新された回答を確認してください –

+0

私は何か似たようなことをしましたが、それを示す良い方法があると思いました。私はすでにuser123をお気に入りにしました。ありがとう、結構です! –