2016-05-22 14 views
-3

私の仲間のコーダー!ある配列の要素が別の配列の要素数であるかどうかを調べる

これは私が現在解決しようとしている問題です。

a = new int[] {11, 12, 13, 14}; 
b = new int[] {121, 144, 169, 200}; 

私の仕事は2つの配列を比較し、121が11の平方根であるかどうかをチェックすることです。 144は12平方です。それぞれの

  1. は、配列aにint型とそれぞれに配列bのint、
  2. チェックint型ならば、私はその後、自分自身を掛け、Bで== int型jを、見返りに:私の擬似コードだなど 本当。
  3. それ以外の場合はfalseを返します。

マイコード:

public static boolean squared(int[] a, int[] b) { 
for (int i : a) 
    for (int j : b) 
    if (b[j] == a[i]*a[i]) 
    return true; 
    return false; 
    } 
} 

このアルゴリズムのロジックは私に公正なようです。しかし、それはテストに合格しません(私はそれをオンラインで解決しています)。私がnewbyなので、経験豊富なプログラマーが何を言っているのだろう、なぜテストに合格しないのだろうか? 121 = 11 * 11の場合はtrueを、200 = 14 * 14の場合はfalseを出力するように、擬似コードとコード自体を変更する必要がありますか? ありがとうございます。

UPD.:Thank you everyone!問題は解決された。私は熟練したコーダーにはっきりと見える論理的なミスを犯したことに同意します。私は私の質問が下降表示されているのを見ても、それは本当に私がエラーを理解するのに長い時間を要し、私は(私に)質問する価値があったと信じています。

+2

コードでは、 'i'は' a'配列のインデックスではなく、 'j'の場合と同じです – Titus

+0

ありがとう、アンドリュー、今どこが間違っているのか分かります。 – mohican93

+0

私はあなた自身でこれを解決できると確信しています。比較の直前に要素を印刷するとどうなりますか? – quamrana

答えて

0

for (int i : a)

を交換する必要があり、あなただけのこれを行うことができます:

return (IntStream.range(0, a.length).filter(i->a[i]*a[i]!=b[i]).count())==0; 
+0

素晴らしい!ありがとう@ joel314!それは助けになった。 – mohican93

0

整数の配列で拡張されたforループを使用しています。

この場合、a = new int[] {11, 12, 13, 14}の場合、最初のループ内のa[i]a[11]を表し、IndexOutOfBoundExceptionをスローします。

あなたがabが同じサイズを持っていると仮定し、Java 8を使用していると仮定し

for (int i = 0 ; i < a.length ; i++)

関連する問題