使用equals方法的逻辑错误

时间:2015-04-15 20:42:29

标签: java

所以我的程序假设从用户那里获取有关手机品牌,序列号和价格的信息。然后,如果用户想要,程序将比较输入的值(即我的品牌和价格)并将其与数组中的对象进行比较,以查看是否发生任何匹配。然而,当涉及到我的if-else语句(最后一个)时,eclipse就会终止,无论用户是否输入" true"或者错误"

这里是代码的一部分:

import java.util.Scanner;

class Cellphone {

private String brand;
private long serialNumber;
private double Price;

public Cellphone (String br, long sN, double Pr)
{
    brand= br;
    serialNumber = sN;
    Price = Pr;
}
public boolean equals(Cellphone phone)
{
    if (Price == phone.Price  && brand.equals(phone))
        return true;
    else
        return false;}
public boolean equals2(Cellphone phone)
{ if (Price == phone.Price)
    return true;
else
    return false; 
}
public boolean equals3(Cellphone phone)
{ if (brand.equals(phone));
    return true;
}

}
 public class CellPhoneSearch {

public static void main(String[] args) {
    // TODO Auto-generated method stub
Cellphone[] cellphoneArr = new Cellphone[10];
        cellphoneArr [0] = new Cellphone ("Samsung", 123456789, 500.5);
        cellphoneArr [1] = new Cellphone ("HTC", 123459876, 850.3);
        cellphoneArr [2] = new Cellphone ("Sony", 543216789, 1230.4);
        cellphoneArr [3] = new Cellphone ("Acer", 987654321, 600);
        cellphoneArr [4] = new Cellphone ("Razr", 543298761, 700);
        cellphoneArr [5] = new Cellphone (cellphoneArr [1]);
        cellphoneArr [6] = new Cellphone (cellphoneArr [2]);
        cellphoneArr [7] = new Cellphone (cellphoneArr [3]);
        cellphoneArr [8] = new Cellphone (cellphoneArr [4]);
        cellphoneArr [9] = new Cellphone (cellphoneArr [5]);


     System.out.println("Please enter the brand");
     Scanner userPreference = new Scanner(System.in);
     String userBrand = userPreference.nextLine();

     System.out.println("Please enter the serial number");
     Scanner userSN = new Scanner(System.in);
     long userSerialNumber = userSN.nextLong();

     System.out.println("Please enter the Price");
     Scanner userPr = new Scanner(System.in);
     Double userPrice = userPr.nextDouble();


Cellphone cell_1 = new Cellphone( userBrand, userSerialNumber, userPrice  );

Scanner input = new Scanner(System.in);
System.out.println("Please enter true or false if you'd like to conduct a search to see whether or not two or more cellphones are similar");
boolean enteredValue = input.nextBoolean();

if (enteredValue == true)
   { 
    for(int i=0; i<=cellphoneArr.length-1; i++)
      { System.out.println("hello");
        if (cell_1.equals(cellphoneArr[i]))
       System.out.println(cellphoneArr[i].toString());
      }


      }
else
   for(int i=0; i>=cellphoneArr.length; i++)
      {if (cell_1.equals2(cellphoneArr[i]))
          System.out.println(cellphoneArr[i]);

       }

在我最后的if - else语句中,好像是语句

 cell_1.equals(cellphoneArr[i]);

无法评估。 Eclipse编译程序很好,但我没有看到我想要获得的结果。

3 个答案:

答案 0 :(得分:3)

您在此处将苹果与橙子(或StringCellphone)进行比较:

brand.equals(phone);

这就是Cellphone.equals()始终返回false的原因。您应该比较手机的品牌String

brand.equals(phone.brand);

此外,按照惯例,您应该声明equals方法,如下所示:

@Overrride
public boolean equals(Object obj)

方法参数应该有Object类型(不是Cellphone)才能正确覆盖Object.equals(),这就是你应该做的事情。

最后,如果覆盖equals,则还应覆盖Object.hashCode(),以便从用于相等性比较的相同字段计算哈希码。这是因为相等的对象必须具有相同的哈希码。 This answer告诉您有关equalshashCode的实施细节的所有信息。

答案 1 :(得分:0)

更改上一个for-statement: 老:

for(int i=0; i>=cellphoneArr.length; i++)

新:

for(int i=0; i<=cellphoneArr.length; i++)

答案 2 :(得分:-1)

我不确定equals方法中的IF语句是否是拼写错误,但应该有一个return语句。如果它确实是一个拼写错误,那么另一个原因可能是Price字段就像其他字段一样是私有的,你可能会在课堂外调用该字段,但我不确定这是否会导致问题。希望它有所帮助。