2016-12-16 61 views
-1

我想添加到我的代碼的異常在底部在Java中使用異常

if(legalNeighbor(map,i1,j1,i1,j2)==false&&i1!=i2&&j1!=j2){ 
     return 0; 

我想要做的是:如果「如果」上面是真實的,而不是做「返回0」我會拋出異常將從這一點

if (locationNeighbor(map,i1+1,j1,i1,j1)==2&&map2[i1+1][j1]==-1){ //down 
      map2[i1+1][j1]=counter; 
      return distance(map,i1+1,j1,i2,j2,map2,counter+1); 
     } 
     if (locationNeighbor(map,i1,j1+1,i1,j1)==3&&map2[i1][j1+1]==-1){ 

,然後檢查代碼,如果再「如果」發生了,我會從這個區域檢查代碼

if (locationNeighbor(map,i1,j1+1,i1,j1)==3&&map2[i1][j1+1]==-1){ //right 
     map2[i1][j1+1]=counter; 
     return distance(map,i1,j1+1,i2,j2,map2,counter+1); 
    } 

然後我最後一次檢查

if (locationNeighbor(map,i1,j1-1,i1,j1)==4&&map2[i1][j1-1]==-1){ //left 
     map2[i1][j1-1]=counter; 
     return distance(map,i1,j1-1,i2,j2,map2,counter+1); 
    } 

這是我的代碼

public static int distance(int[][] map, int i1, int j1, int i2, int j2, int[][]map2, int counter) { 
    if(legalNeighbor(map,i1,j1,i2,j2)==true){ // if its 1 step before the end 
     map2[i2][j2]=counter; // put the last number 
    } 
     if (locationNeighbor(map,i1-1,j1,i1,j1)==1&&map2[i1-1][j1]==-1){ //up 
      map2[i1-1][j1]=counter; 
      return distance(map,i1-1,j1,i2,j2,map2,counter+1); 
     } 
     if (locationNeighbor(map,i1+1,j1,i1,j1)==2&&map2[i1+1][j1]==-1){ //down 
      map2[i1+1][j1]=counter; 
      return distance(map,i1+1,j1,i2,j2,map2,counter+1); 
     } 
     if (locationNeighbor(map,i1,j1+1,i1,j1)==3&&map2[i1][j1+1]==-1){ //right 
      map2[i1][j1+1]=counter; 
      return distance(map,i1,j1+1,i2,j2,map2,counter+1); 
     } 
     if (locationNeighbor(map,i1,j1-1,i1,j1)==4&&map2[i1][j1-1]==-1){ //left 
      map2[i1][j1-1]=counter; 
      return distance(map,i1,j1-1,i2,j2,map2,counter+1); 
     } 
     print(map2); 
     if(legalNeighbor(map,i1,j1,i1,j2)==false&&i1!=i2&&j1!=j2){ 
      return 0; 
     } 
     else{ 
      int x=map2[i2][j2]; 
      return x; 
     } 
} 

是這甚至可能有異常?

+0

'拋出新的異常('?甚至定義你自己的自定義異常類。 –

+0

所以你想在你的最後一段代碼中拋出一個代替「return 0」的異常?或者取代每一個回報? –

+0

我從來沒有使用過異常之前,我有點困惑與如何做到這一點,我希望異常是在最後的塊 –

回答

0

任何事情都是可能的,但它可能不是一個好主意。例外應該是真正的例外,而不是可能發生的事情。

不僅如此,它們在性能方面也很昂貴。您不應該使用例外control flow logic

爲什麼不是來自名爲isLegalNeighbor的方法的真/假回報不夠?

在這裏你確實有兩種方法:一種是計算距離,另一種是確定合法的鄰居。將它們分開。一種方法應該做好一件事,它的名字應該清楚這是什麼。

還有一點:我覺得你的代碼很難閱讀。如果我是你,我會開始思考更多關於風格以及如何編寫更多可讀代碼。

+0

這是一個學校工作,我只需要代碼工作。返回0的問題是我曾經這樣做過,代碼被卡住了,並且不能繼續,因爲它是一個需要從A點到B的雙數組,所以我的代碼的問題在這裏是一張圖片來解釋 https://s29.postimg.org/l8rqe8ufb/Untitled.jpg –

+0

你有一個比拋出異常更大的問題「只需要代碼工作」 - 我認爲學校的工作是爲了學習如何 – duffymo

+0

但我的代碼被分割,合法的鄰居檢查是否i1,j1和i2,j2是鄰居的,如果是的話,這意味着我仔細地繪製了路徑。那麼我有4「如果」 --- locationNeighbor(map,i1-1,j1,i1,j1)== 1這個檢查鄰居是否高於 下一個如果要檢查鄰居是否在下(如果它等於2)和3是用於檢查右側一旦我做到了,我就知道4是鄰居位置在哪裏了。現在我有一張地圖滿是-1,然後我開始標記路徑,以確保我沒有進入無盡的遞歸,並且我標記了我一直在用「計數器」計數的步驟 –

0

忘掉異常,這可能不是你想要的。首先解釋你想要達到的目標。這是完全不明顯的代碼。

奇怪的是,第一個if語句在map2中設置了一個值,但沒有返回。這意味着該值可能會被下面的代碼覆蓋。這是打算嗎?

我也想有該行的錯誤:

if(legalNeighbor(map,i1,j1,i1,j2)==false&&i1!=i2&&j1!=j2){ 

的第四個參數I1應該I2,對不對?

爲了讓您的代碼更具可讀性,您應該使用有意義的名稱引入實例字段和方法。如果你的導師迫使你使用靜態方法和無意義的名字,比如i1等,你應該解僱他/她。 :-D

這裏是我的意思的想法:)

// I chose weird names because I really don't know what's in these arrays 
// You should make it clear from the name what it represents 
private int[][] fooBar; 
private int[][] bazBop; 

public int distance(int fromX, int fromY, int toX, int toY, int counter) { 
    if (legalNeighbor(fromX, fromY, toX, toY) == true) { // if its 1 step before the end 
     bazBop[toX][toY] = counter; // put the last number 
    } 
    int newX = fromX - 1; 
    int newY = fromY; 
    if (locationNeighbor(newX, newY, fromX, fromY) == 1 && bazBop[newX][newY] == -1) { //up 
     bazBop[newX][newY] = counter; 
     return distance(newX, newY, toX, toY, counter + 1); 
    } 
    // ... 
}