Передача экземпляру значения вручную вызывает ошибку «несовместимые типы» - PullRequest
0 голосов
/ 22 апреля 2020
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

1 Ответ

1 голос
/ 22 апреля 2020

Прежде всего, давайте посмотрим разницу между = и == в 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;
        }
}
...