2012-09-30 89 views
-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; 
} 
+1

[I-1]'如果從1開始,你會沒事的,但跳過第一個元素(就像你現在所做的那樣)。如果你從0開始,你會得到一個ArrayIndexOutOfBoundsException。我的建議是從1開始,並在循環之外(之前)進行第一次。 – 11684

+0

什麼是「功能不正確」btw? – 11684

回答

0

你無處使用數組Lane的元素。目前newLane是一個空數組。我已經分配的Lane價值newLane

剛過for循環的功能更改爲以下

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; 
    } 

更新 ,檢查零元素是否爲非零。如果是,那麼先交換它。

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

我想他離開newLane的初始化來縮短thr代碼。他明確表示,自從他更改for循環後,它「功能不正確」。 – 11684

+0

嗯,我認爲他沒有這樣做。 –

0

正如我的評論已經說過:你很接近。
只需添加

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

for循環之前。

+0

他沒有使用傳遞的數組'Lane'。你認爲這會起作用嗎? –

+0

你知道我的假設。我認爲他正在檢查正確的數組,但在縮短代碼的同時保持初始化狀態,但我已經問過他「錯誤地使用函數」的含義。 @ShashankKadne – 11684

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; 
} 
+0

不,他不想在前面得到0,他希望它與前一個條目交換,並且只有在它的前任不是0. – 11684

+0

但是'與以前的條目交換在數組中,並且只有它的前任不是0意味着'得到前面的所有0'。 –

+0

是的,但不是在一個方法調用中。這是布賴恩韋伯斯特編輯之前的賽車遊戲,記得嗎?所以這種方法被稱爲「down」,我認爲這是'go down'的縮寫。大多數遊戲都不會說'你想從A到B?幸運的是,我們只是做一個數組排序,所以你不需要做所有困難的事情來到那裏,但只需等待幾分鐘即可。' – 11684

-1

我會在你說`newLane if語句試試這個

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 ; 
} 
+1

這將始終返回一個0的數組。 –