2016-10-26 5 views
1

何らかの理由で、私が作成したforループの外側にある配列値にアクセスできないようです。私は配列をローカルに宣言しました。しかし、ユーザーが値を入力しなければならないとき、何らかの理由でバインドされた値が私に0を与え続けます。 forループ内の配列から情報を取得し、他の関数で使用できるように "一般化"する方法はありますか?あなたは、配列の各要素を初期化していないfor-loopを強化使用しているためだ私の配列の値に、それが動作していてもアクセスすることができません

import java.util.*; 

public class Array { 

     public static void main(String[] args) throws IndexOutOfBoundsException { 

     int[] array = new int[100]; 
     try{ 
     for(int i: array){ 
      array[i] = (int)(Math.random()*100); 
      System.out.println(array[i]); 
      } 
      Scanner input = new Scanner(System.in); 
      System.out.println("Please enter an index for which you would like to see: "); 
      int index = input.nextInt(); 
      System.out.println(array[index]); 

     }catch(IndexOutOfBoundsException ex){ 
      System.out.println("Please enter in an index thta is not out of bounds"); 
     }finally{System.out.println("--------------------------");} 
    } 
} 

答えて

0

は、値を取得する唯一の要素は最初の要素はゼロです。配列を宣言すると、すべての値がゼロに設定されます。したがって、拡張されたfor-loopでは、array[0]という値を設定しています。これが出力としてゼロになっている理由です。

これで強化さfor-loop置き換えます

 int[] array = new int[100]; 
     try{ 
     for(int i=0;i<array.length;i++){ 
      array[i] = (int)(Math.random()*100); 

      System.out.println(array[i]); 
      } 
      Scanner input = new Scanner(System.in); 
      System.out.println("Please enter an index for which you would like to see: "); 
      int index = input.nextInt(); 
      System.out.println(array[index]); 

     }catch(IndexOutOfBoundsException ex){ 
      System.out.println("Please enter in an index thta is not out of bounds"); 
     }finally{ 
      System.out.println("--------------------------"); 
     } 
+0

まあ頭に顔ヤシのthats。しかし、論理的な賢明なべきではない "強化"のための定期的なループの相対的な能力を持って、いくつか? – Dcdw51

+0

@ Dcdw51私は自分の答えに説明を追加しました。 forループは繰り返しのためのものであり、通常の配列の割り当てではなく、割り当てられた変数配列に対してインデックス値がインクリメントされることはありません –

2

ループのためにこれを使用してみてください、それが動作するはずですが:

for(int i=0;i<array.length;i++){ 
      array[i] = (int)(Math.random()*100); 
      System.out.println(array[i]); 
     } 

あなたのコードに問題があった。

あなたがfor(int i: array) array [0]からarray [99]への配列の内容をiにコピーするだけで、他の値が存在しないので、常にゼロになりますセット。拡張forループ は

を理解するために以下のコードの反復のために使用すべきか強化されたループ作品のため、ご理解の下に与えられたループしてみてください:

int[] array = new int[100]; 
     array[0]=1;array[1]=2; 

     for(int i: array){ 
      // array[i] = (int)(Math.random()*100); 
      System.out.println(i); 
     } 

あなたはこのコードを実行すると、第一及び第二の要素は1と2を印刷します。

今すぐクリアを希望します。

0

配列を宣言すると、100個のインデックスが与えられます。それらは自動的にすべて0になります。各ループのために、あなたの配列の0番目のインデックスに乱数を代入するだけです。それ以外は0のままです。配列のi番目の要素に実際にアクセスしていません!

これはあなたのコードを修正する必要があります。

public static void main(String[] args) { 
    int[] array = new int[100]; 
     try{ 
     for(int i=0; i<array.length; i++){ 
      array[i] = (int)(Math.random()*100); 
      System.out.println(array[i]); 
      } 

      Scanner input = new Scanner(System.in); 
      System.out.println("Please enter an index for which you would like to see: "); 
      int index = input.nextInt(); 
      System.out.println(array[index]); 

     }catch(IndexOutOfBoundsException ex){ 
      System.out.println("Please enter in an index thta is not out of bounds"); 
     }finally{System.out.println("--------------------------");} 

     } 
} 
関連する問題