有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java用一个扫描器读取两个字符串

我有一台扫描仪,它首先读取标题,然后读取用户键入的两个单词,用空格分隔,并将它们放入导演姓名和导演姓氏中:但根据下面的代码,我得到了错误:

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();

共 (4) 个答案

  1. # 1 楼答案

    您需要使用nextLine方法获取输入。下面是我在eclipse中尝试的工作版本

    编辑:根据问题中的新编辑更新代码。每当整数作为输入并点击回车键时,换行符作为输入进入下一个扫描仪。因此,在获取输入后编写一个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);
    }
    }
    
  2. # 2 楼答案

    您的解决方案会起作用,但正如您所看到的,我编辑了这个问题,问题是我之前使用了相同的扫描仪来调用addBook方法

     int answer = scanner.nextInt();
     scanner.nextLine();
    
    
     System.out.println("\nEnter title: ");
    
        title = scanner.nextLine();
    
        System.out.println("\nEnter director: ");
        String[] parts = scanner.nextLine().split(" ");
        directorName = parts[0];
        directorSurname = parts[1];
    
  3. # 3 楼答案

    除了使用scanner.nextLine()使用整行之外,还应该使用适当的正则表达式来表示至少一个空格字符

    String[] parts = scanner.nextLine().split("\\s+");
    
  4. # 4 楼答案

    Scanner.next()将只给您一个单词,请使用scanner.nextLine()

    所以你最终得到了

    String[] parts = scanner.nextLine().split(" ");

    另外,将标题输入修改为:

    title = scanner.nextLine();