java - 变量 sc 可能尚未初始化

标签 java

<分区>

我已经 2 年多没有编码了,而且非常生疏,但是在谷歌上搜索了很长一段时间后,我无法弄清楚我做错了什么。首先我会解释这个程序,即使它很简单。我有一个包含 680 个数字的 .txt 文件,每行一个数字,我正在尝试查找范围为 000-999 的数字的频率。我相信我可以找出频率部分,因为它看起来很基本,但我无法弄清楚如何从 .t​​xt 文件导入数字。这是我的错误:

C:\Users\Arthur\Documents\FrequencyStraightPlay\FrequencyStraightPlay.java:17: error: variable sc might not have been initialized
        while (sc.hasNextInt()) {
               ^
1 error

代码:

import java.io.*;
import java.util.*;

public class FrequencyStraightPlay {

public static void main(String[] args) {

    int [] rawNumbers = new int [680];
    int i = 0;

    Scanner sc;
    try {
        sc = new Scanner(new File("Numbersnospaces.txt"));
    } catch (FileNotFoundException e) {
        System.out.println("File not Found!");
    }
    while (sc.hasNextInt()) {
        rawNumbers[i++] = sc.nextInt();
    }

    System.out.println("The Raw Numbers: ");

    for (i = 0; i < 680; i++) {
        System.out.println(rawNumbers[i]);
    }

}

}

最佳答案

如果您捕捉到 FileNotFoundException,则 sc 不会被初始化。

while 循环放在 try block 中,以便您知道 sc 在您到达它时已经初始化。

有人可能认为解决方案是在声明时将 sc 初始化为 null,但这是不正确的,因为没有移动 while 循环在 try block 中,如果您捕获了 FileNotFoundException,您可能会得到一个 NullPointerExceptionsc 仍然是 null

关于java - 变量 sc 可能尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908353/

相关文章:

java - 用于创建 Lambda 的 AWS Java SDK 版本

java - Spring Boot Rest Web服务在Get Request中获取多个参数

java swing 定时器...叹息

encryption - 如何通过 java 的加密扩展加密 PGP 消息?

java - 悬停时显示单词含义,可用作 MT 系统的后期编辑工具

java - 删除,然后在表上插入数据而不关闭程序并再次运行

Java错误: java. lang.ArrayIndexOutOfBoundsException:0

java - 如何从 onchange 事件调用 Controller 方法?

java - lambdaj 安装

java - 如何在java中导入org.apache.bcel.classfile.ClassParser?