在布尔方法中缺少返回值

时间:2013-11-03 20:54:14

标签: java boolean return-value

您好我正在为一所学校的项目工作,我很难解释为什么我的程序一直告诉我在我的所有方法中都缺少一个返回语句,

这是我的代码:

public class Temperature {
 private int temperature;

 //constructors
 public int Test( int temperature )
 {
    temperature = temperature;
    return temperature;
 }
 public int TempClass()
 {
    temperature = 0;
    return 0;
 }



 // get and set methods
 public int getTemp()
 {
    return temperature;
 }

 public void setTemp(int temp)
 {
    temperature = temp;
 }

 //methods to determine if the substances
 // will freeze or boil
 public static boolean isEthylFreezing(int temp)
 {
    int EthylF = -173;

    if (EthylF <= temp)
    {System.out.print("Ethyl will freeze at that temperature");}
    else 
    return false;
 }

 public boolean  isEthylBoiling(int temp)
 {
    int EthylB = 172;

    if (EthylB >= temp)
    System.out.print("Ethyl will boil at that temperature");
    else
    return false;
 }

 public boolean  isOxygenFreezing(int temp)
 {
    int OxyF = -362;

    if (OxyF <= temp)
    System.out.print("Oxygen will freeze at that temperature");
    else
    return false;
 }

 public boolean  isOxygenBoiling(int temp)
 {
    int OxyB = -306;

    if (OxyB >= temp)
    System.out.print("Oxygen will boil at that temperature");
    else
    return false;
 }

 public boolean  isWaterFreezing(int temp)
 {
    int H2OF = 32;

    if (H2OF <= temp)
    System.out.print("Water will freeze at that temperature");
    else
    return false;
 }

 public boolean  isWaterBoiling(int temp)
 {
    int H2OB = 212;

    if (H2OB >= temp)
    System.out.print("Water will boil at that temperature");
    else
    return false;
 }
}

3 个答案:

答案 0 :(得分:4)

以下是问题专栏:

if (EthylF <= temp)
{System.out.print("Ethyl will freeze at that temperature");}
else 
return false;

编译器认为return false属于else分支,因此如果采用EthylF <= temp分支,则方法结束而不返回值。其他boolean吸气剂也是如此。

正确缩进和使用花括号可以帮助您避免这样的问题:当您看到格式如下的相同代码时

if (EthylF <= temp) { 
    System.out.print("Ethyl will freeze at that temperature");
} else { 
    return false;
}

你确切地知道问题所在。

return true分支中添加if可以解决此问题。

答案 1 :(得分:1)

int EthylF = -173;

if (EthylF <= temp)
{System.out.print("Ethyl will freeze at that temperature");}
else 
return false;

此方法仅在EthylF > temp时返回(false)。否则,您有一个打印,但没有返回声明。

非void方法中每个可能的执行路径必须以return语句或throw语句结束。

答案 2 :(得分:1)

查看isXXXFreezing(int temp)isXXXBoiling(int temp)方法中的if-else语句:if语句下面的部分不包含return语句,只包含else下面的部分。

isEthylFreezing(int temp)的正确代码是

public static boolean isEthylFreezing(int temp) {
  int EthylF = -173;

  if (EthylF <= temp)
  {
    System.out.print("Ethyl will freeze at that temperature");
    return true;
  }
  else 
    return false;
}

同样在Test的构造函数中,您将变量temperature赋给自身。我想你想要将函数参数temperature分配给Test的成员变量,该变量也被命名为temperature?如果是,请写this.temperature = temperature;this引用当前的Test对象,并确保您访问成员变量。