• 締切済み

配列のインデックス番号を返したいが

インデックス番号を返したい 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]); } } }

みんなの回答

  • ww-_-ww
  • ベストアンサー率51% (46/89)
回答No.2

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)
回答No.1

丸投げっぽいので、ソースは書きません。 配列の要素の中身を返すのではなく、for文で回しているindexを返せばよいのでは? あとロジックがかなり怪しげな動きをします。整理したほうが良いと思います。 ためしに配列の要素数を3と入力してから、0,0,1と入力し探す値を0としてみてください。 for文の記述回数ですが、こんなに必要でしょうか? 落ち着いて考えてみてください。

fvgaf
質問者

お礼

まだ解けていないのですが 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; } }

関連するQ&A