我有扫描仪,它首先读取标题,然后应该读取用户输入的两个单词,用空格划分并将它们放入导演姓名和导演姓氏中:但是使用下面的代码我得到错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at MainSystem.addBook(MainSystem.java:57)
at MainSystem.main(MainSystem.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
代码:
private static void addBook() {
System.out.println("\nEnter title: ");
title = scanner.next();
System.out.println("\nEnter director: ");
String[] parts = scanner.next().split(" ");
directorName = parts[0];
directorSurname = parts[1];
}
编辑: 为了调用方法,我还使用扫描仪添加了书籍 - 可能是问题所在:
System.out.println("\nEnter 0 for loading the Library." +
"\nEnter 1 for save and quit" +
"\nEnter 2 for list all the Books in the Library." +
"\nEnter 3 for add Book to the Library.");
int answer = scanner.nextInt();
答案 0 :(得分:2)
您需要使用nextLine方法获取输入。下面是我在eclipse中尝试的工作版本
编辑:根据问题中的新修改更新代码。每当输入整数并按Enter键时,换行符将作为下一个扫描程序的输入。因此,在获取输入后写入nextLine()。更新的代码按编辑的问题工作。
import java.util.Scanner;
public class Snippet {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Enter 0 for loading the Library."
+ "\nEnter 1 for save and quit"
+ "\nEnter 2 for list all the Books in the Library."
+ "\nEnter 3 for add Book to the Library.");
int answer = scanner.nextInt();
scanner.nextLine();
if(answer == 3)
addBook();
}
private static void addBook() {
System.out.println("Enter title: ");
String title = scanner.nextLine();
System.out.println("Enter director: ");
String[] parts = scanner.nextLine().split(" ");
String directorName = parts[0];
String directorSurname = parts[1];
System.out.println("title : " + title);
System.out.println("directorname : " + directorName);
System.out.println("directorsurname : " + directorSurname);
}
}
答案 1 :(得分:1)
除了使用scanner.nextLine()
来消耗整行之外,你应该使用正确的正则表达式来表示至少一个空白字符。
String[] parts = scanner.nextLine().split("\\s+");
答案 2 :(得分:0)
Scanner.next()
只会给您一个字,而是使用scanner.nextLine()
。
所以你最终得到了
String[] parts = scanner.nextLine().split(" ");
此外,将标题输入修改为:
title = scanner.nextLine();
答案 3 :(得分:0)
您的解决方案可行 - 但正如您所看到的,我编辑了问题,问题是我之前使用相同的扫描程序来调用addBook方法。
iframe