java - 将数据读入数组时出现空异常

标签 java arrays

我在下面 printf 行的 test.main(test.java:) 线程“main”java.lang.NullPointerException 中收到 Java 异常。

我在标准输入上输入值,例如 1 2 Bus,然后回车,然后另一行,我在 Windows 上使用 Ctrl-Z 结束。

我已经放入了打印语句,并且数据的读入似乎工作正常。为什么我在这里收到 null 异常?

这是代码:

import java.util.Scanner;

public class test {
    public static class Data
    {
        public Data() {}
        public Data(int v1, int v2, String s1) { n1 = v1; n2 = v2; s = s1; } 
        public int n1; 
        public int n2;
        public String s; 
    };

    public static void main(String[] args) {
        int i = 0;
        int v1, v2;
        v1 = v2 = 0;
        String s;

        Data items[] = new Data[100];

        Scanner input = new Scanner(System.in);

        while(input.hasNext()) {
            switch(i % 3) {
                case 0: v1 = input.nextInt(); break;
            case 1: v2 = input.nextInt(); break;
                case 2: 
                    s = input.next();
                    items[i] = new Data(v1, v2, s);
                    break;
            }
            ++i;
        }
        input.close();

        for(int j = 0; j < i; ++j) {
            //on next line get Exception in thread "main" java.lang.NullPointerException at test.main(test.java:)
            System.out.printf(  "%s\t%d\t%d\n", items[j].s, items[j].n1, items[j].n2);
        }         
    }
}

最佳答案

查看您的代码,正确缩进后:

switch(i % 3) {
    case 0: 
        v1 = input.nextInt(); 
        break;
    case 1: 
        v2 = input.nextInt();
        break;
    case 2: 
        s = input.next();
        items[i] = new Data(v1, v2, s);
        break;
 }
 ++i;

这意味着只有在 i % 3 == 2 时才初始化 items[i]。因此数组的三个元素中有两个为空。

但是在最后一个循环中,您尝试打印每个元素,而不测试 null。

旁注:命名字段 s、n1 和 n2 是导致代码不可读、不可维护的最佳方式。为您的类和变量指定有意义的名称。

关于java - 将数据读入数组时出现空异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064762/

相关文章:

java - 如何从自定义 Eclipse 插件调用现有 Eclipse 对话框?

java - SimpleDateFormat 行为的解释

java - 是否可以在不同目录中安装 tomcat 并将 Web 应用程序保留在其他目录中

objective-c - NSString 到固定长度 char 数组的转换

c# - 来自非托管内存的 byte[] 数组

java - 使用java计算增量平均值

java - 使用树莓派从 PN532 得到奇怪的答案

jquery - Tumblr API v2 : Displaying Images?

c++ - 使用指针分配数组值

java - 一场 war 中的多个 CDI 配置文件(开发、测试、质量保证、生产)?