2

なぜ思考は機能しないのですか?ゼロを出力するだけです。ただし、インデックス値 'i' を持つ通常の for ループを使用し、ループの本体内で 'a[i]' を使用すると機能します。

通常の for ループでも値が出力されないため、問題は出力ループにはありません。

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

    Scanner s = new Scanner(System.in);
    int[] a = new int[5];
    for (int i : a)
    {
        System.out.println("Enter number : ");
        i=s.nextInt();

    }
    System.out.println("\nThe numbers you entered are : \n");
    for (int i : a)
    {
        System.out.println(i);
    }
}
}
4

5 に答える 5

7

拡張されたforループを使用して要素にアクセスする場合:-

for (int i : a)
{
    System.out.println("Enter number : ");
    i=s.nextInt();

}

これint iは、配列内の要素のコピーです。変更しても、変更はアレイに反映されません。そのため、配列要素は0です。

したがって、従来のforループを使用して反復し、その上の配列要素にアクセスしてindex値を割り当てる必要があります。

配列が何らかの参照の配列であったとしても、それでも機能しません。これは、for-eachの変数が、配列またはコレクション参照のプロキシではないためです。For-eachは、配列内の各エントリをループ内の変数に割り当てます。

だから、あなたのenhanced for-loop:-

for (Integer i: arr) {
    i = new Integer();
}

に変換されます:-

for (int i = 0; i < arr.length; i++) {
    Integer i = arr[i];
    i = new Integer();
}

したがって、iループ内のの初期化は配列に反映されません。したがって、配列要素はnullです。

Workarond:-

  1. 従来のforループを使用します:-

    for (int i = 0; i < a.length; i++) {
        a[i] = sc.nextInt();
    }
    
于 2012-11-06T13:47:53.007 に答える
2

最初のforループは、「クラシック」なforループである必要があります。

for (int i = 0; i < a.length; i++) {
    a[i] = s.nextInt();
}
于 2012-11-06T13:48:14.707 に答える
2

i=s.nextInt();

iこれは、配列要素ではなく、ローカル変数に代入しています。本質的に、

 for (int i : a) {
   //  body
 }

と同じです

for (int index = 0; index < a.length; index++) {
    int i = a[index];
    // body
}

したがって、何を割り当ててiも配列には影響しません。

于 2012-11-06T13:51:19.427 に答える
1

声明

i=s.nextInt()

自問してみてください:- ここで何をしているのですか?

ユーザーから入力を取得しています。しかし、どこに保管していますか?私の中?これは、反復ごとに上書きされます。またi、for ループのローカル スコープです。したがって、含まれるループの外には存在しません。

したがって0... 0 ..0、出力として取得されます。

ソリューション :

for (int i=0;i<a.length;i++) {
a[i] = s.nextInt();
}

ユーザーが入力した値を配列内に格納します。

于 2012-11-06T13:53:21.653 に答える
-2

から取得した値を保存する必要がありますs.nextInt();。これは次の方法で実現できます。

int j = 0;
for (int i : a){
      System.out.println("Enter number : ");
      a[j++]=s.nextInt();

}

これは機能するはずです。

于 2012-11-06T13:47:23.283 に答える