Java Несравнимые типы данных char и String

#java #string #for-loop #char #java.util.scanner

#java

Вопрос:

Когда я запускаю Javac, он сообщает мне, что у меня есть несравнимые типы данных char и String в

 while(responseChar == "y")
 

не уверен, что нужно изменить, чтобы исправить эту ошибку

 import java.util.Scanner;
public class UseOrder
{
public static void main(String[] args)
{

    int answer, num, q;
    String name, response;
    double p;
    char responseChar;
    Scanner keyboard = new Scanner(System.in);

    Order order1 = new Order();
    order1.setCustomerName();
    order1.setCustomerNum();
    order1.setQuantity();
    order1.setUnitPrice();
    order1.computePrice();
    order1.displayInfo();

    keyboard.nextLine(); 
    System.out.println("Do you need the shipping and handling service?");
    System.out.println("Enter y or n :");
    response = keyboard.nextLine();
    responseChar = response.charAt(0);
    while(responseChar == "y")
    {
        ShippedOrder order2 = new ShippedOrder();
        order2.getCustomerName();
        order2.getCustomerNum();
        order2.getQuantity();
        order2.getUnitPrice();
        order2.computePrice();
        order2.displayInfo();
    }
}
}
 

Ответ №1:

Чтобы определить символьный литерал, используйте одинарную кавычку: ' . Двойные кавычки определяют строковые литералы.

 while(responseChar == 'y')
 

Ответ №2:

При желании вы можете использовать большой Character класс C для преобразования вашего char в String :

 String converted = Character.toString(responseChar); 
while(converted.equalsIgnoreCase("y"))
{
  // ...
}
 

Но эта версия намного более подробная, чем буквальное сравнение, предложенное Джеффри

Комментарии:

1. Спасибо за очень быстрый ответ. Он скомпилировался, как только я изменил «на «. Однако я столкнулся с новой проблемой. Когда я запустил программу и ввел y для вопроса о доставке и обработке, она просто продолжает повторять имя клиента: null номер клиента: 0 Или количество : 0 Цена заказа : 0 Цена отгрузки 4.0 общая цена : 0

2. Установите некоторое реальное значение для объекта, например order1.setCustomerName(«John Doe»); А также реализуйте некоторый механизм для прерывания цикла while . Если вы ожидали распечатать его только один раз, вы можете добавить break; в конце блока while . т.е. после order2.displayInfo();

3. @Nate Вероятно, вам следует передать Order объект ShippedOrder конструктору, чтобы вы могли получить все те значения, которые вы установили выше: ShippedOrder order2 = new ShippedOrder(order1);

Ответ №3:

Вместо "y" этого сделайте это 'y' . "" Представляет строку.