-1

配列内の値 0 が 0 でない場合に前の要素と交換するプログラムを設計しようとしています。

たとえば、配列が次の場合1 1 0 1 1 1、プログラムは次のようになるまでスワップを続けます。0 1 1 1 1 1

しかし、実行するとこれIndexOutOfBoundExceptionが発生します。for ループを次のように変更してみました。

for(int i = 1; i < newLane.length; i++)

範囲外の問題は解決しましたが、正しく機能しませんでした。

以下は私のコードです:

public static int[] down(int[] lane) {   
    int lan = lane.length; // length of array
    int[]newLane = new int[lan];  // creates new 1d matrix

    for(int i = 1; i < newLane.length; i++) {  
        if(newLane[i-1] != 0 && newLane[i] == 0 ){ // getting out of bounds error
            int tmp = newLane[i - 1];
            newLane[i - 1] = newLane[i];
            newLane[i] = tmp;
        }
    }

    return newLane;
}
4

4 に答える 4

1

配列を簡単に並べ替えることができると思います:

public static int[] down(int[] lane){       
    int lan = lane.length; // length of array
    int[]newLane = Arrays.copyOf(lane,lan)  // creates new 1d matrix
    Arrays.sort(newLane);
    return newLane;
}
于 2012-09-30T07:11:34.860 に答える
0

私のコメントがすでに言っているように:あなたは近くにいます。
追加するだけ

if(newLane[0] == 0) newLane[0] == 1;

forループの前。

于 2012-09-30T07:07:25.143 に答える
0

配列の要素を使用しているところはどこにもありませんLane。現在newLane、空の配列です。に値を割り当てLaneましたnewLane

関数を以下に変更します

public static int[] down(int[] lane){   

    int lan = lane.length; // length of array
    int[]newLane = new int[lan];  // creates new 1d matrix
    newLane = lane;

     for(int i = 1; i < newLane.length; i++) {  

         if(newLane[i-1] != 0 && newLane[i] == 0 ){ // getting out of bounds error
            int tmp = newLane[i - 1];
            newLane[i - 1] = newLane[i];
            newLane[i] = tmp;
            }



    }

         if(newLane[0]!=0 && newLane[1]==0)
         {
             int tmp = newLane[0];
                newLane[0] = newLane[1];
                newLane[1] = tmp;
         }
     return newLane;
    }

更新 forループの直後で、0番目の要素がゼロ以外であるかどうかを確認します。はいの場合は、最初に交換します。

if(newLane[0]!=0 && newLane[1]==0)
         {
             int tmp = newLane[0];
                newLane[0] = newLane[1];
                newLane[1] = tmp;
         }
于 2012-09-30T07:05:32.073 に答える
-1

これを試してみます

 public static int[]  swapping(int[] lane) 
  {   
int[] result = new int[lane.length];  

 for(int i = 0; i < result .length; i++) {  
      if ( result[i]==0) 
      {
        if( i==0)
           {
           }
         else
            {
       temp = result[i] ; 
       result[i]  = result [i-1] ; 
       result [i-1] = temp ; 
             }
     else
      {
       }
 return result ;
}
于 2012-09-30T07:15:49.883 に答える