2017-03-05 51 views
1

這種方法不會編譯,看不出爲什麼。錯誤是:返回偶數的方法

找不到符號變量i

int i在for循環定義。該方法應返回int aint b之間的偶數。

代碼:

public int partall(int a, int b){ 
    int partall; 
    int største; 
    int minste; 
    if(a == b){ 
     partall = 0; 
    }else{ 
     if(a>b) { 
     største = a; 
     minste = b; 
     }else if(a<b){ 
      minste = a; 
      største = b; 

      for(int i = minste; i<= største; i++){ 
       if(i % 2 == 0) { 
        partall = i; 
       } 
      } 

     } 

    } 
    return i; 
} 
+0

'i'只在循環的範圍可見,因爲這是它的聲明。在方法內聲明'i',它將在'return'語句中可見。 – jlordo

+0

我們已經嘗試在int int minste下編寫int我們,但我們仍然遇到了錯誤。 – Akarlsen

+0

相同的錯誤或不同的? – jlordo

回答

1

你只for loop不在外面那久違i具有範圍。

從執行,我想你可能想要返回partall但不是i

初始化partall的東西,即

int partall = 0;

,並在最後一行

return partall;

這應該工作

+0

謝謝,這項工作就像一個魅力 – Akarlsen

2

i僅在for循環的範圍可見,但不是外面。當你做return i;它超出了範圍。因此,您需要將for區塊之外的聲明。

解決方案:

public int partall(int a, int b){ 
    int partall; 
    int største; 
    int minste; 
    int i = 0; 
    if(a == b){ 
     partall = 0; 
    }else{ 
     if(a>b) { 
      største = a; 
      minste = b; 
     }else if(a<b){ 
      minste = a; 
      største = b; 

      for(i = minste; i<= største; i++){ 
       if(i % 2 == 0) { 
        partall = i; 
       } 
      } 

     } 

    } 
    return i; 
} 
+0

不幸的是,我們仍然得到了同樣的錯誤,說我沒有定義 – Akarlsen

+0

@Akarlsen你需要在進行更改後重新編譯你的代碼。它可能會選擇舊的.class文件 –

+0

不,這會產生編譯錯誤,因爲我可能未被初始化。它需要被初始化爲一個值。 –

0

變量i不在範圍內可見的return聲明。您需要在for循環之外以及if-else之外聲明i,以使其在return的範圍內可見。嘗試聲明int i = 0;(或甚至int i = minste;並刪除下面的任務)在聲明其餘變量的函數頂部。

0

你應該初始化「partall」,並返回變量:

public int partall(int a, int b){ 
    int partall = 0; 
    int største; 
    int minste; 
    if(a == b){ 
     partall = 0; 
    }else { 
     if(a>b) { 
     største = a; 
     minste = b; 
    } else if(a<b) { 
     minste = a; 
     største = b; 

    for(int i = minste; i<= største; i++){ 
     if(i % 2 == 0) { 
      partall = i; 
     } 
    } 

    } 

} 
return partall; 

}