#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'
. ""
Представляет строку.