为什么string.equals(“string”)不起作用?

时间:2013-12-06 20:31:44

标签: java

为什么我在交付之后不会得到20分钟如果我致电Test(String pStr),我会致getMatInt()的“黑曜石”?

在所有字符串声明之后,还尝试了toString(),也声明了例如“黑曜石”为new String a。什么都行不通。

getBonus正在返回0而不是20/30 / .... 我已经尝试过“黑曜石”和“黑曜石”,两者都不适合我...

public class test
{
  private String str;
  private int matInt;
  private int bonus;
  private int magic;

 public test(int pMagic, String pStr)
{
      int magic = pMagic;
      str = pStr;
 }

 private void materialEquals()
 {

     if(str.equals("Obsidian"))
     {
         matInt = 20;
     }
     .....
 }

 private void calcBonus()
 {
     materialEquals();
     bonus = magic * matInt;
 }

 public int getBonus()
 {
     calcBonus();
     return bonus;
 }

}       

2 个答案:

答案 0 :(得分:1)

尝试:

public int getMatInt()
{
     materialEquals();
     return matInt;
}

在您的构造函数中没有理由这样做:str = new String(pStr);,只需使用str = pStr

事实上,您可能最好在构造函数中设置matInt

public test(String pStr)
{
     str = pStr;
     materialEquals();
}

根据您拥有的材料数量,您可能需要考虑使用枚举。

编辑后确定:

 public int getBonus()
{
 calcBonus(); //bonus won't be calculated otherwise
 return bonus;
}

进一步编辑后:

您的构造函数错误,您没有初始化int magic。请尝试使用此构造函数。

public test(int pMagic, String pStr)
{
  this.magic = pMagic; //int magic = pMagic was a new variable only in the constructor scope
  this.str = pStr;
  calcBonus();
 }

此外,您还可以计算建筑上的奖金。

答案 1 :(得分:0)

您需要致电materialEquals(),以便在20比较时将matInt分配给equals,因为整数始终初始化为默认值0申报时