когда я использую 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);
}
}
Возможного дубликата [Пропуск nextLine() после того, как с помощью следующего(), nextInt() или других методов nextFoo()] (http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-other-nextfoo-methods) –
Как показывают решения в дублированном вопросе, самый простой способ исправить ваш код - использовать 'keyboard.nextLine()' с соответствующим методом парсинга для ввода числового пользователя: 'количество = Integer.parseInt (keyboard.nextLine()) ; 'и' price = Double.parseDouble (keyboard.nextLine()); '. Проблема возникает из-за того, что 'Scanner.nextInt()' и 'Scanner.nextDouble()' не потребляют последний символ новой строки в 'System.in'. –
Глупые названия. '" string.java:658 "' не является проблемой, требующей решения. Это ссылка на номер файла/строки. – EJP