所以我的程序假设从用户那里获取有关手机品牌,序列号和价格的信息。然后,如果用户想要,程序将比较输入的值(即我的品牌和价格)并将其与数组中的对象进行比较,以查看是否发生任何匹配。然而,当涉及到我的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编译程序很好,但我没有看到我想要获得的结果。
答案 0 :(得分:3)
您在此处将苹果与橙子(或String
与Cellphone
)进行比较:
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告诉您有关equals
和hashCode
的实施细节的所有信息。
答案 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字段就像其他字段一样是私有的,你可能会在课堂外调用该字段,但我不确定这是否会导致问题。希望它有所帮助。