2016-03-28 22 views
0

私はプログラムのためにこの入力を持っています:
10 8 1 1 4 2 2 4 6 4 4 2 5 0 4 3 4 5 5 2 6 1 3 5 4 2 6 4 6 5 7 2 6 1
最初の2つの要素は高さと幅であり、残りは線分を作る点の座標です。一度に4つの要素をJavaの配列で反復処理する方法はありますか?

public static String[] trees(int[] input) 
    { 
     W = input[0]; 
     H = input[1]; 

     int x1, x2, y1, y2; 

     for (int i = 2; i < input.length; i+=4) 
     { 
      x1 = input[i]; 
      x2 = input[i + 1]; 
      y1 = input[i + 2]; 
      y2 = input[i + 3]; 

      StdOut.println(x1 + x2 + y1 + y2); 
     } 
     return null; 
    } 

それが唯一のプロトタイプだが、今のように私が唯一input配列を反復処理したい: と私は、このメソッドを持っています。 WとHは、それは以下のようにする必要がありint classwide変数

+0

あなたのループがinput.length-1に行くので、入力[i + 3]にアクセスしようとしているので、[input.length + 2]の入力が3つあります終わり。 –

+3

これは、配列がちょうど2 + 4 * nの長さではないことを意味します。たぶんあなたは何かのために幅と高さを使用すると予想されます。 –

+1

@PeterLawreyは言ったように、あなたの 'input'は正しい長さではありません。証明:あなたのデータで[IDEONE](https://ideone.com/genaOh)を実行してください。あなたの前提を確認してください。 – Andreas

答えて

1

です:私はArrayIndexOutOfBoundsException
注意を取得しています。 i = i + 4を追加しているので、最後の4つの要素までトラバースする必要があります。

public static String[] trees(int[] input) 
{ 
    W = input[0]; 
    H = input[1]; 

    int x1, x2, y1, y2; 

    for (int i = 2; i < input.length-3; i+=4) 
    { 
     x1 = input[i]; 
     x2 = input[i + 1]; 
     y1 = input[i + 2]; 
     y2 = input[i + 3]; 

     StdOut.println(x1 + x2 + y1 + y2); 
    } 
    return null; 
} 
+0

' input.length'が2 + 4 * nであれば、 'length-3'に変更しても違いはありません。問題は、 'input'には期待されるものが含まれていないということです。 – Andreas

+0

@Andreasそれはエラーをなくしますが、入力を修正しません。 ;) –

+1

@PeterLawrey真実ですが、エラーを取り除き、配列全体を処理しないことも間違っています。少なくともエラーがあっても、間違ってデータを静かに処理するのではなく、何かが間違っていることを知っています。この場合、エラーはあなたの友人です。 @Andreasが合意した。 – Andreas

0

この入力を指定しても問題はありません。あなたの入力が、たとえばinput = {10,8,1、1,4}の座標に4要素未満しかないような方法で入力が来ると、範囲外のインデックスが発生します。あなたのforループの中で、あなたの入力には明らかに利用できないi + 3が必要です。

希望すると助かります!

関連する問題