2014-10-16 70 views
0

我有這樣的顏色排列:的Java:如何旋轉非方形二維數組

public RGBImage(int width, int height, RGBColor background) { 
     pixel = new RGBColor[width][height]; 
     this.w = width; 
     this.h = height; 
     this.b = background; 

     for(x = 0; x < width; x++){ 
      for(y = 0; y < height; y++){ 
       pixel[x][y] = b; 
      } 
     } 

,我想旋轉,右,代碼已經做了很好的方陣感謝關於@遺忘創作,但我得到outofbounds錯誤使用時非方形矩陣

public void rotateRight() { 
     RGBColor[][] mirror = new RGBColor[h][w]; 
       for(int i = 0 ; i < h; i++){ 
        for(int j = 0 ; j < w; j++){ 
         mirror[i][j] = pixel[j][w-i-1]; 
        } 
       } 
      pixel = mirror; 
    } 

回答

1

認爲問題是mirror = pixel;共享相同的參考文獻......所以它在旋轉時正在改變自己,導致它做出奇怪而美妙的事情。

我的建議是經過了從像素複製到鏡像,然後分配鏡子像素的循環,像這樣:

public void rotateLeft() { 
    RGBColor[][] mirror = new RGBColor[w][h]; 
    if(w == h){ 
     for(int i = 0 ; i < h; i++){ 
      for(int j = 0 ; j < h; j++){ 
       mirror[i][j] = pixel[h-j-1][i]; 
      } 
     } 
     pixel = mirror; 
    } 
} 

編輯:

對於新RotateRight,你」重新使用寬度變量而不是未旋轉的像素數組上的高度。嘗試這個代替:

public void rotateRight() { 
    RGBColor[][] mirror = new RGBColor[h][w]; 
      for(int i = 0 ; i < h; i++){ 
       for(int j = 0 ; j < w; j++){ 
        mirror[i][j] = pixel[j][h-i-1]; 
       } 
      } 
     pixel = mirror; 
} 
+0

感謝的人,它的工作就像一個魅力!任何提示將其升級到非方矩陣? – bknight 2014-10-16 23:40:24

+0

不用擔心!其實是的,在我回答之後,我正在考慮這個問題...將鏡子的創建改爲RGBColor [] [] mirror = new RGBColor [h] [w];'(反轉寬度和高度),移除if檢查它*應該*是正確的。 – 2014-10-16 23:41:33

+0

是的我已經這樣做了,現在只需要解決循環的問題,目前這樣做:http://pastebin.com/pXKxH73p但有出界,這是有道理的,只是非常'不要按時制止它。 thx再次。 – bknight 2014-10-16 23:57:10

0

的問題是,mirror = pixel分配mirror來指代相同的陣列pixel。它確實不是複製數組。那麼在你的循環中,pixel[i][j] = mirror[h-j-1][i]將一個像素從陣列的一個單元複製到同一陣列的另一個單元