public class Order {
boolean isFilled;
double billAmount;
String shipping;
public Order(boolean filled, double cost, String shippingMethod) {
if (cost > 24.00) {
System.out.println("High value item!");
}
isFilled = filled;
billAmount = cost;
shipping = shippingMethod;
}
public void ship() {
if (isFilled) {
System.out.println("Shipping");
System.out.println("Shipping cost: " + calculateShipping());
} else {
System.out.println("Order not ready");
}
}
public double calculateShipping() {
if (shipping ="Regular") {
return 0;
} else if (shipping = "Express") {
return 1.75;
} else {
return .50;
}
}
public static void main(String[] args) {
// do not alter the main method!
Order book = new Order(true, 9.99, "Express");
Order chemistrySet = new Order(false, 72.50, "Regular");
book.ship();
chemistrySet.ship();
}
}
上面的代码导致了这个错误。
Order.java:26: error: incompatible types: String cannot be converted to boolean
if (shipping="Regular")
{
^
Order.java:28: error: incompatible types: String cannot be converted to boolean
} else if (shipping = "Express") {
^
2 errors
首先让我们来看看两者之间的区别。=
和 ==
在Java中
=
'是Java中的赋值运算符。==
'是比较运算符,如果一边等于另一边,则返回true。在你的例子中,你正在尝试比较两个变量,所以你不必使用赋值运算符 =
. 而且由于 String
不是一个基元类型(是一个类),你不能使用 ==
用于对象之间的引用比较(地址比较),所以你需要使用方法 equals()
类型的两个对象之间进行比较。String
. 如果任何字符不匹配,则返回false。如果所有字符都匹配,则返回true。
要解决这个问题,你只需要
替换 if (shipping="Regular")
与 if (shipping.equals("Regular"))
和 else if (shipping = "Express")
与 else if (shipping.equals("Express"))
所以你 calculateShipping()
方法如下
public double calculateShipping() {
if (shipping.equals("Regular")) {
return 0;
} else if (shipping.equals("Express")) {
return 1.75;
} else {
return .50;
}
}