当前位置: 首页 > 面试题库 >

方法中的扫描器对象和NoSuchElementException

昝存
2023-03-14
问题内容

我真的试图通过线程找到答案,但仍然希望能得到一些反馈。

我认为下面的代码风格不好,但是我不知道为什么java.util.NoSuchElementException在输入数字后会把我射杀
,因为我为两个方法创建了两个Scanner对象,并且我应该能够开始一个新的输入。而且,如果我删除了input.close()inputAndPrintNumber()中的内容,它将正常工作并正确编译。我真的希望知道如果我仍然使用两个Scanner
obj并且不删除(input.close()如果可能的话)为什么以及如何解决它。

import java.util.*;
public class t{

public static void main(String [] args){
    inputAndPrintNumber();
    inputAndPrintString();
}

public static void inputAndPrintNumber(){
    Scanner input = new Scanner(System.in);
    String s = input.nextLine();        
    System.out.print(s);        
    input.close();
}

public static void inputAndPrintString(){
    Scanner input2 = new Scanner(System.in);
    int a = input2.nextInt();       
    System.out.print(a);
}
}

我什至不知道下面的代码是更好的还是更好的主意?

import java.util.*;

public class t{
public static Scanner input = new Scanner(System.in);
public static void main(String [] args){
    inputAndPrintNumber();
    inputAndPrintString();  
    input.close();
}

public static void inputAndPrintNumber(){
    String s = input.nextLine();        
    System.out.print(s);
}

public static void inputAndPrintString(){
    int a = input.nextInt();        
    System.out.print(a);
}
}

问题答案:

scanner.close()在这种情况下,调用时,它不仅会关闭扫描仪,还会关闭从中读取数据的流System.in。因此,如果System.in以后要使用,请不要将其关闭(如果已关闭,则无法重新打开它并从中读取任何数据,因此是例外)。

您的第二个代码示例解决了此问题,因为当您确定不会从输入流中读取任何其他内容时,关闭扫描程序。

BTW看来你混的地方nextLine,并nextInt调用nextLine似乎更适合inputAndPrintString,同时nextIntinputAndPrintNumber)。



 类似资料:
  • 当我尝试使用javac在windows命令提示符中编译程序时,我得到以下错误消息: 我做错了什么?

  • 我已经尝试过了,但没有找到任何可以理解的解决方案(我对java非常陌生,这对我来说很难),或者自己解决它。以下是完整的代码(我知道代码不是那么高效): 正如您所看到的,我试图自己解决它,甚至在一些代码上添加了注释,但当它运行到方法并返回时,它失败了,因为扫描器认为在我写东西之前有东西要扫描。这里有个例外-

  • 我正在尝试用javaoop编写一个程序,在这个程序中我主要创建一些人(每个人都有姓名、年龄、身份:是否受雇)。 我想按姓名搜索这些人,并显示所有细节。 例如,如果有一个叫约翰的人,我通过名字找到了他,我想列出所有的细节(状态、年龄等等)。 我尝试在Person类中实现这个方法。< br >我不知道创建一个包含所有人和姓名的地图,然后在其中进行搜索是否更好。 以下是我的代码: 人员类: 雇佣类别:

  • 我正在为一个CS项目做一个游戏,其中一个要求是只有一个扫描仪为人类输入。如果我创建一个抽象类“Player”,它有一个扫描器对象,并创建两个扩展“Player”的“人类”类,它们是各自有自己的扫描器,还是共享“Player”扫描器?另外,当我结束游戏时如何关闭扫描仪?

  • 这让我很费解。我正在试图理解如何解决Java无法识别我的“settitle”方法存在于第一个“song”之后的问题。这是一个音乐应用程序。它还有另外两个类。我们将非常感谢所有的帮助。 编辑:添加歌曲类。

  • 这是我程序的主要方法。当调用nextLine()函数时,扫描器解析变量L而不是space时,我遇到了一个问题。不过,nextInt()可以按照预期工作。我的程序在试图用integer.parseint()函数解析空字符串时崩溃了。 第一个输入是指定将要进行的行数的整数,下面的输入是空格分隔的整数。 堆栈跟踪如下: