- 締切済み
配列のインデックス番号を返したいが
インデックス番号を返したい x[0]=1 x[1]=2 x[2]=3 x[3]=3 x[4]=5 の場合で探す(返す)値を3とした場合⇒2,3と値が返るようにしたい import java.util.*; class Test7_23 { static int[] arraySrchIdx(int[] a,int x){ int idx = 0; for(int i=0;i<a.length;i++){ //A if(a[i]==x){ a[i] = i; idx++; } else{ a[i] = 0; } } for(int i=0;i<a.length;i++) //B System.out.println(a[i]); int[] b = new int[idx]; for(int i=0;i<a.length;i++){ if(a[i] != 0) for(int j=0;j<idx;j++) b[j]=a[i]; } for(int i=0;i<idx;i++) System.out.println("b["+i+"]="+b[i]); return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("配列の要素数は:"); int n = std.nextInt(); int[] x = new int[n]; for(int i=0;i<n;i++){ System.out.print("x["+i+"]="); x[i] = std.nextInt(); } System.out.print("探す値:"); int a = std.nextInt(); int[] b = arraySrchIdx(x,a); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ww-_-ww
- ベストアンサー率51% (46/89)
arraySrchIdxメソッド内のfor文は1回で、配列の値と引数のXの値が一致した場合だけ、そのインデックスを保持し最後に戻せばいいんじゃないですか? ようするに for(int i=0;i<a.length;i++){ //A if(a[i]==x){ a[i] = i; idx++; }else{ a[i] = 0; } } このfor文条件はこのままでif文ロジックを見直せばその下のfor文は要らないですね。
- BleuLune
- ベストアンサー率57% (15/26)
丸投げっぽいので、ソースは書きません。 配列の要素の中身を返すのではなく、for文で回しているindexを返せばよいのでは? あとロジックがかなり怪しげな動きをします。整理したほうが良いと思います。 ためしに配列の要素数を3と入力してから、0,0,1と入力し探す値を0としてみてください。 for文の記述回数ですが、こんなに必要でしょうか? 落ち着いて考えてみてください。
お礼
まだ解けていないのですが returnの所が問題ですかね? もともとこの感じで書いていたのですが やればやるほど分けが分からなくなってしまいます。 static int[] arraySrchIdx(int[] a,int x){ for(int i=0;i<a.length;i++){ if(a[i]==x) a[i] = i; return a; } }