Изменение ввода для строковой переменной в Java - PullRequest
0 голосов
/ 16 сентября 2011

Я пытаюсь использовать строковый ввод (да или нет) в качестве часового для цикла. Цикл повторяет оператор switch и в конце запрашивает у пользователя вопрос «да» или «нет». Пока они не наберут «да» в качестве ответа, цикл продолжает получать данные от пользователя. Проблема возникает из-за попытки получить новое значение для дозорного.

*** Просмотрены комментарии и внесены некоторые изменения. Вот обновленный код:

    Scanner input = new Scanner ( System.in );

    System.out.print( "Please enter a product number, 1 - 5: ");
    int product = input.nextInt();
    double sum = 0;
    boolean complete = false;

    while (!complete) {

    switch (product){
        case 1: sum = sum + 2.98;
        break;
        case 2: sum = sum + 4.50;
        break;
        case 3: sum = sum + 9.98;
        break;
        case 4: sum = sum + 4.49;
        break;
        case 5: sum = sum + 6.87;
        break;
    }
    System.out.print( "Is your order complete? Please type true or false:");
    complete = in.nextLine();
    }

Все это работает, но у меня все еще проблемы с подсказкой сломать стражу. Я пытаюсь настроить его так, чтобы пользователь вводил true, чтобы завершить цикл, или false, чтобы продолжить. Я начинаю думать, что я что-то упустил. Я очень ценю помощь, спасибо.

Ответы [ 4 ]

2 голосов
/ 16 сентября 2011

Измените

    default: String complete = input.Stream(); //Not coded, but will also ask for input.

на

    default: complete = input.Stream(); //Not coded, but will also ask for input.

Вы переделываете строку, что не то, что вам нужноИ следуйте советам использования .equals, а не == для строк или других ссылочных типов.

0 голосов
/ 16 сентября 2011

Две вещи:

1) повторное выделение завершено.Случай по умолчанию должен быть просто:

default: complete = input.Stream();

2) в Java вы не можете сравнивать строки с! =.Каждая строка является объектом, и с помощью операторов сравнения вы сравниваете идентификаторы объектов, а не содержимое объектов.Java никогда не увидит два объекта String равными, если только они не являются двумя строками, указывающими на одну и ту же область памяти.Чтобы сравнить значения двух строк, вы должны использовать метод .equals (), например:

while (!complete.equals("yes")) {

Или даже лучше, как привычка:

while (!"yes".equals(complete)) {

Это лучше, потому что еслиполная переменная String была бы нулевой, тогда первое сравнение выдало бы исключение нулевого указателя, где второе не будет, так как литеральная строка «да» всегда будет преобразовываться в ненулевой объект.

Надеюсь, что поможет.

Дэвид

0 голосов
/ 16 сентября 2011

Вы объявляете выполненное дважды.Попробуйте изменить свой регистр по умолчанию следующим образом:

default: complete = input.Stream ()

0 голосов
/ 16 сентября 2011

Захватывает, потому что вы объявили это дважды.Снимите вторую String декларацию:

  default: complete = input.Stream(); //Not coded, but will also ask for input.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...