scanner nextLine()异常:找不到行

时间:2017-05-14 14:01:14

标签: java java.util.scanner

我正在为静态方法执行扫描程序,并发生此异常:

Exception in thread "main" java.util.NoSuchElementException: No line found

我的修改方法倾向于从控制台获得2个字符串作为输入,但它不起作用。 注意:我没有使用scanner.close();

static ArrayList<Book> modBook(){
    Book tempbook = Book.searchTitle();

    if(tempbook !=null){
        Scanner sc = new Scanner(System.in);
        int i = BookList.indexOf(tempbook);

        System.out.println("Please enter title:");
        String booktitle = sc.nextLine();
        System.out.println("Please enter author:");
        String bookauthor = sc.nextLine();

        tempbook.setTitle(booktitle);
        tempbook.setAuthor(bookauthor);
        BookList.set(i, tempbook); 

    }
    return BookList;
}

我的搜索方法:

static Book searchTitle(){
    try (Scanner input = new Scanner(System.in)) {
        String booktitle;
        System.out.println("Please enter title:");
        booktitle = input.nextLine();

        for(Book b : BookList){
            if(b.getTitle() != null && b.getTitle().equals(booktitle)){
                System.out.println(b.toString());
                return (Book) b;
            }
        }        
    }catch(Exception e){e.getMessage(); return null;}

    System.out.println("not found");
    return null;
}

2 个答案:

答案 0 :(得分:2)

您在静态方法中使用了两个 java.util.Scanner 实例。您只需使用 java.util.Scanner 的一个实例。删除java.util.Scanner的两个实例,并将其添加为全局变量。

static Scanner input = new Scanner(System.in);

然后使用输入 ONLY 来完成代码中的所有读数。确保在完成输入后关闭输入。

答案 1 :(得分:1)

更新:尝试使用资源块关闭曲线括号@media (orientation: portrait) { .reorientMessage{ visibility: visible; } .mainContent{ visibility: hidden ; } } @media (orientation: landscape) { .reorientMessage{ visibility: hidden; } .mainContent{ visibility: visible ; } } 内的内容。因此,它确实关闭了InputStream,然后将其删除。谢谢

<div class="reorientMessage">please reorient etc..</div>
<div class="mainContent">normal stuff here</div>