2015-10-11 5 views
-1

когда я использую s.charAt (0), в то время как s является строковым вводом от пользователя, я получаю это как ошибку, даже если программа запускает первую половину программы.Что такое решение для StringIndexOutOfBoundsException

Исключение в потоке "основного" java.lang.StringIndexOutOfBoundsException: индекс строки из диапазона: 0 в java.lang.String.charAt (String.java:658) в Shopping.main (Shopping.java : 22)

Какое решение для этой программы? вот мой код.

import java.util.Scanner; 
public class Shopping { 
public static void main(String[] args){ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Programmed by Raymond Lee"); 
    System.out.println("Welcome to Shopper's Paradise"); 
    ShoppingCart cart = new ShoppingCart(); 
    System.out.print("Enter the name of the first item: "); 
    String item = keyboard.nextLine(); 
    System.out.print("Enter the quantity: "); 
    int quantity = keyboard.nextInt(); 
    System.out.print("Enter the price: "); 
    double price = keyboard.nextDouble(); 
    cart.addToCart(item, price, quantity); 
    System.out.print("Enter the name of the next item or Q to quit: "); 
    String quit = keyboard.nextLine(); 
    char choice = quit.charAt(0); 
    while((choice != 'Q' && choice != 'q') || quit.length() != 1) { 
     quit = item; 
     System.out.print("Enter the quantity: "); 
     quantity = keyboard.nextInt(); 
     System.out.print("Enter the price: "); 
     price = keyboard.nextDouble(); 
     cart.addToCart(item, price, quantity); 
     System.out.print("Enter the name of the next item or Q to quit: "); 
     quit = keyboard.nextLine(); 
     choice = quit.charAt(0); 
    }   
    System.out.println(cart); 
} 
} 
+0

Возможного дубликата [Пропуск nextLine() после того, как с помощью следующего(), nextInt() или других методов nextFoo()] (http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-other-nextfoo-methods) –

+0

Как показывают решения в дублированном вопросе, самый простой способ исправить ваш код - использовать 'keyboard.nextLine()' с соответствующим методом парсинга для ввода числового пользователя: 'количество = Integer.parseInt (keyboard.nextLine()) ; 'и' price = Double.parseDouble (keyboard.nextLine()); '. Проблема возникает из-за того, что 'Scanner.nextInt()' и 'Scanner.nextDouble()' не потребляют последний символ новой строки в 'System.in'. –

+0

Глупые названия. '" string.java:658 "' не является проблемой, требующей решения. Это ссылка на номер файла/строки. – EJP

ответ

0

Ошибка встречающийся на этой линии

char choice = quit.charAt(0); 

Это связано с тем, что при вызове

double price = keyboard.nextDouble(); 

затем nextDouble оставляет символ новой строки во входном потоке. Поэтому, когда следующее называется

String quit = keyboard.nextLine(); 

, то результат из nextLine пустая строка, результаты в данной ошибке при попытке использовать charAt метод.

Чтобы устранить эту ошибку, просто измените следующие

String quit = keyboard.nextLine(); 

К

String quit = keyboard.next(); 

Надеется, что это помогает

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