2012-12-07 137 views
0

我写了我的接口代码,但错误。我如何比较两个家具物品的两个价格?我在if语句中是否正确? return声明表示无法找到符号。我怎样才能解决这个问题?'找不到符号'错误

public boolean IsCheaper(Furniture f) 
{ 
    if (f instanceof Furniture) 
    { 
     boolean status; 
     if (price > f.getPrice()) 
      status = true; 
     else if (price < f.getPrice()) 
      status = false; 

    } 
    return status; 
} 
+2

接口不包含任何实现。它只包含方法定义。 – kosa

+1

'家具f'意味着'f instanceof Furniture' *总是* true。 – dasblinkenlight

+0

'status'需要至少在返回的同一个代码块中定义,同样,并不是所有的路径都为'status'赋值。 – Matthew

回答

1
public boolean IsCheaper(Furniture f) 
    { 
     boolean status= false; // or true 
     if (f instanceof Furniture) // if(f!=null) as suggested by a comment 
     { 

     if (price > f.getPrice()) 
      status = true; 
     else if (price < f.getPrice()) 
      status = false; 

     } 
     return status; 
    } 

状态应为外界宣布,如果块,因为你需要它外面。

而且是真的有需要,如果检查的instanceof只需要检查,如果方法接受一个父类家具

+0

你应该初始化声明boolean status = false; – Subin

0

变量boolean status;的范围只是if块if (f instanceof Furniture)

和你在if块之外有一个return语句,所以只要if块完成,变量status变得不可用,因为它超出了范围。

因此,编译器无法找到它,因此说“无法找到符号:状态”

因此,在if (f instanceof Furniture)块之外声明您的状态变量。

+0

我之前做过,它说变量可能没有初始化 –

+0

只是在将它声明为'true'或'false'时声明它像'boolean status = false;' – Abubakkar

+0

你是在说这个@Abu ?? \t public boolean IsCheaper(Furniture f) \t { \t \t \t boolean status = true; \t \t \t布尔状态= false; \t \t如果(F的instanceof家具) \t { 如果(价格> f.getPrice()) 状态= TRUE; else if(price