当前位置: 首页 > 知识库问答 >
问题:

在循环之后,扫描器类没有关闭

拓拔曦
2023-03-14

我正试着写这段代码

import java.util.*;

class Program {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int i;
        int num;

        for (i = 1; i <= 5; i++) {

            System.out.println("Enter a number");
            num = scanner.nextInt();

            if (num % 2 != 0) {
                System.out.println(num);
            }
        }
        scanner.close();
    }
}

我尝试了许多方法来修复它,但都不起作用:(

共有1个答案

苏宏峻
2023-03-14

请注意,扫描器不仅可以从System.in读取,还可以从文件读取。

您必须非常小心地调用scanner.close()。此方法旨在关闭资源,即文件。但是在您的示例中,您使用system.in-内部输入流。如果关闭它,以后在程序中就不能使用system.in,因为它将被关闭。

Scanner scan = new Scanner(System.in);
// do what you want
// scan.close() - DO NOT INVOKE close()
try(Scanner scan = new Scanner(new File("foo.txt"))) {
    // do what you wan
} // scan.close() will be called automatically
class Program {
    public static void main(String... args) {
        Scanner scan = new Scanner(System.in);

        for (int i = 0; i < 5; i++) {
            System.out.print("Enter a number: ");
            int num = scan.nextInt();

            if (num % 2 != 0)
                System.out.println(num);
        }
    }
}
 类似资料:
  • 我需要创建一个简单的游戏,其中创建了一个随机数,用户必须猜测数字输入到扫描仪。如果他们的猜测太高,系统会告诉他们猜测得更低,如果猜测得太低也是一样。 我正在使用while循环,但我不知道如何连续调用扫描器,以便用户可以不断猜测。以下是我到目前为止的代码:

  • 我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。

  • 我想在加载ApplicationContext后将@Component类添加到spring容器中。但我不能使用BeanFactory。因为我使用的是BeanFactory,所以我必须为这些类定义bean。但是我不能定义它(如果我不使用反射)。因为这些类将在运行时由类加载器加载。 例如 在本例中,Spring在应用程序调用时为此类创建bean。没有必要用@Bean来定义bean。但是我想要的是编译S

  • 我需要在while循环之前输入一个用户,这样它就会知道程序是否想继续。问题是while条件的更内部看不到扫描仪之前输入的一行。有什么建议吗?

  • 嗨,我正在编写一个程序,它使用Scanner从用户那里获取输入,然后使用布尔方法检查输入的长度是否不超过六个字符。问题是,如果长度小于六个,我使用了while循环来不断请求输入;但是在第一次错误输入后,如果你插入一串六个字母或更长的字符串,循环仍然会继续。这是程序: 谢谢