2016-02-04 2 views
0

ли кто-нибудь видит неправильный код здесь ?? я бы хотел видеть, пока работает постоянно, пока условие не выполняется, но это, конечно, нет. скажите, пожалуйста, какая часть кода разрушает мой ожидаемый результат?do-while loop не постоянно работает

public static void main (String[] args){ 
    Scanner scan = new Scanner(System.in); 
    ArrayList<Item> cart = new ArrayList<Item>(); 
    Item item; 
    String itemName; 
    double itemPrice; 
    int quantity; 
    String keepShopping; 
    double total = 0.0; 
    DecimalFormat m = new DecimalFormat("######,##"); 
    do { 
     System.out.print ("Enter the name of the item: "); 
     itemName = scan.nextLine(); 
     System.out.print ("Enter the unit price: "); 
     itemPrice = scan.nextDouble(); 
     System.out.print ("Enter the quantity: "); 
     quantity = scan.nextInt(); 

     item = new Item(itemName,itemPrice,quantity); 
     cart.add(item); 
     total +=itemPrice*quantity; 

     System.out.println ("Continue shopping (y/n)? "); 
     keepShopping = scan.nextLine(); 

    } while (keepShopping.equals("y")); 

    for (int i = 0; i < cart.size(); i++) { 
     System.out.println(cart.get(i).toString()); 
     System.out.println("Total price: " + m.format(total)); 
    } 
    scan.close(); 
} 
+0

Пожалуйста, уменьшите это до [mcve] и сообщите нам, какой ввод вы используете. –

+0

Подсказка: распечатайте 'keepShopping' после того, как вы его прочитали. Я подозреваю, что это не то, что вы ожидаете. –

+0

@ user307610 Я предполагаю, что у вас есть лишние пробелы или что-то, что приводит к тому, что значение не равно «y». Попробуйте называть обрезку на keepShopping. – Phil

ответ

2

nextInt() делает не потреблять любые символы следующие целочисленного значения, поэтому CR LF после него все еще находится в буфере и считывается nextLine() вызова, а это означает, что keepShopping всегда пустая строка (или то, что было вводится после значения количества в той же строке).

Ваш код также призывает nextDouble() и nextInt() без первого вызова соответствующих hasNextDouble() и hasNextInt() методы, так что если вы печатаете что-то неправильно, то программа будет крах и сжечь. Очень распространенный недостаток в использовании Scanner.