2011-09-28 467 views
13

我用使用Java的Eclipse,我得到這個錯誤:Java中, 「變量名」 不能被解析爲一個變量

"Variable name" cannot be resolved to a variable. 

有了這個Java程序:

public class SalCal { 
    private int hoursWorked; 
    public SalCal(String name, int hours, double hoursRate) { 
     nameEmployee = name; 
     hoursWorked = hours; 
     ratePrHour = hoursRate; 
    } 
    public void setHoursWorked() { 
     hoursWorked = hours;  //ERROR HERE, hours cannot be resolved to a type 
    } 
    public double calculateSalary() { 
     if (hoursWorked <= 40) { 
      totalSalary = ratePrHour * (double) hoursWorked; 
     } 
     if (hoursWorked > 40) { 
      salaryAfter40 = hoursWorked - 40; 
      totalSalary = (ratePrHour * 40) 
       + (ratePrHour * 1.5 * salaryAfter40); 
     } 
     return totalSalary; 
    } 
} 

是什麼原因導致這個錯誤信息?

回答

8

如果你看一下變量的作用域「hoursWorked」你會看到,它是類的成員(聲明爲private INT)

您有與作爲參數傳遞的麻煩這兩個變量構造函數。

錯誤消息是因爲'小時'超出了設置者的範圍。

9
public void setHoursWorked(){ 
    hoursWorked = hours; 
} 

您還沒有在該方法中定義hours。小時數不作爲參數傳入,它沒有被聲明爲變量,並且它不被用作類成員,所以你會得到那個錯誤。

3

我注意到怪異的行爲與Eclipse 4.2.1版本提供我這個錯誤:

String cannot be resolved to a variable 

有了這個Java代碼:

if (true) 
    String my_variable = "somevalue"; 
    System.out.println("foobar"); 

你會覺得這個代碼是非常簡單的,條件爲真,我們將my_variable設置爲某個值。它應該打印foobar。對?

錯了,你會得到上面提到的編譯時錯誤。 Eclipse試圖通過假設這兩個語句都在if語句中來防止出錯。

如果你把牙套周圍的條件塊這樣的:

if (true){ 
    String my_variable = "somevalue"; } 
    System.out.println("foobar"); 

然後編譯並運行良好。顯然,括號內條件很差是現在編譯時錯誤的公平遊戲。