2013-12-02 3 views
0

Я пытаюсь создать программу корзины покупок, используя класс ArrayList. Моя проблема в том, что я не могу понять, как выйти из цикла while, когда пользователь совершает покупки. Элементы вводятся как цены. Ниже мой код до сих пор:Создание простой программы «Корзина»

import java.util.Scanner; 
import java.util.ArrayList; 
** 
* 
*/ 
public static void shoppingCart() 
{ 
    Scanner inputReader = new Scanner(System.in); 
    Scanner itemReader = new Scanner (System.in); 
    System.out.print("Would you like to input items? (y/n)"); 
    String input = inputReader.next(); 
    ArrayList<Double> items = new ArrayList<Double>(); 
    while (!input.equals("y") && !input.equals("n")) 
    { 
     System.out.print("Sorry, we need a (y/n): "); 
     input = inputReader.next(); 
    } 

    while (input.equals("y")) 
    { 
     while (!items.equals("-1")) 
     { 
      System.out.print("Please enter an item price, or -1 to exit: $"); 
      items.add(itemReader.nextDouble()); 
     } 
    } 
} 

ответ

1

Вам просто нужно, чтобы получить дополнительный вход со стороны пользователя:

while (input.equals("y")) 
{ 
    while (!items.equals("-1")) 
    { 
     System.out.print("Please enter an item price, or -1 to exit: $"); 
     items.add(itemReader.nextDouble()); 
    } 

    // get the user's input here and set the input variable with it. 

} 

Я хотел бы использовать только один сканер, привязанный к System.in. Я не вижу причин использовать два.

+0

'items.equals ("- 1")' - что это такое должен означать? ;) – dimoniy

+0

Хотя это работает, когда пользователь вводит «-1» для выхода, почему бы вы попросить у них больше ввода? Наверняка они просто хотят выйти. – Cruncher

0

Прямо сейчас у вас есть путь больше циклов, чем вам действительно нужно. попробуйте что-то вроде этого. , когда вы запускаете такую ​​программу, когда пользователь должен ввести значение для выхода из программы, это то, на чем должен основываться ваш цикл while, таким образом он будет оставаться в цикле до тех пор, пока не будет предложена команда закрытия.

while(!input.equals("-1")){ 
    //do your stuff here.. 
    if(!input.equals("y") || !input.equals("n")){ 
     //Try again... 
     //input check 
    }else{ 
     //do your stuff here... 
     //input check 
    } 
} 
if(input.equals("-1"){ 
    //Exit... 
} 
+0

Скажите, как это возможно для цикла while, чтобы закончить, и 'input.equals (" - 1 ")' будет false. – Cruncher

+0

Я не уверен, что понимаю, почему вы думаете, что это должно быть ложным? Это не ложь, это всего лишь команда ввода в этом контексте. Цикл выполняется WHILE, когда команда НЕ «-1». Когда команда ввода IS «-1» выйдет из цикла и выйдет из программы. – MGHandy

+0

Извините, я сказал, что это абсолютно неправильно, это правда или ложь. Условие while while указывает, что (NOT -1), поэтому, если (input! = -1), оно вернет true и продолжит работу. if (input == -1), то if (NOT -1) возвращает false и завершает работу. – MGHandy

0
while (input.equals("y")) 
{ 
    while (!items.get(items.size()-1).equals("-1")) 
    { 
     System.out.print("Please enter an item price, or -1 to exit: $"); 
     items.add(itemReader.nextDouble()); 
    } 
} 

в

if (input.equals("y")) 
{ 
    while (!items.equals("-1")) 
    { 
     System.out.print("Please enter an item price, or -1 to exit: $"); 
     items.add(itemReader.nextDouble()); 
    } 
} 

Если это сделать.

У вас есть проверка «y» только для проверки того, следует ли вам вводить петли и принимать входные данные. Но когда вы заканчиваете ввод входных данных, вы не хотите зацикливаться и запускать это снова. Оператор if - это все, что вам нужно, с циклом внутри него.

+0

Спасибо. После внесения предложенных изменений, я все еще не могу выйти из цикла while, когда я ввожу -1. – user2930063

+0

@ user2930063 ах, это потому, что вы делали items.equals, но вам нужно сначала проверить последний элемент. Смотрите мой новый код. Теперь он должен работать. – Cruncher

0

У вас есть несколько проблем в этой части кода:

while (input.equals("y")) //input never changes in the loop so the loop will never end 
    { 
     while (!items.equals("-1")) //you're comparing ArrayList to a string. You need to 
     //compare list item (such as items.get(items.length()-1) to double (i.e. price) 
     { 
      System.out.print("Please enter an item price, or -1 to exit: $"); 
      items.add(itemReader.nextDouble());// there is no way to check what user 
      //entered because you add it to collection right away 
     } 
    } 

То, что вы действительно хотите что-то вроде этого:

if (input.eqals("y")) { 
    while (true) { 
    System.out.print("Please enter an item price, or -1 to exit: $"); 
    double price = itemReader.nextDouble(); 
    if (price < 0) { 
    break; 
    } 
    items.add(price); 
    } 
} 
+0

Я бы предпочел 'while (price <0)' и изменил оператор if на 'if (price> = 0) items.add (price)'. Мне нравятся бесконечные петли с перерывами, но когда вы можете легко их избежать, это лучше – Cruncher

Смежные вопросы