Java 内部类 NullPointerException

标签 java nullpointerexception drjava

我正在编写一个简短的 Java 程序,该程序应该接受 5 个整数的列表,并将每个整数分配给 6 个成员之一。我想最大化获得 min 之间的值的成员数量。和max值(value)观。
无论如何,出于某种我不知道的原因,我的私有(private) member类似乎抛出 NullPointerException,但我完全不知道为什么。如有任何建议,我们将不胜感激。

import java.util.*;
public class assign {
    private class member {
        private String name;
        private int min;
        private int max;
        public member(String name, int min, int max) {
            this.name = name;
            this.min = min;
            this.max = max;
        }
    }

    public member[] members = {
        new member("Phil", 1, 20),
        new member("Molly", 1, 20),
        new member("Connor", 21, 40),
        new member("Sam", 21, 40),
        new member("Dan", 41, 60),
        new member("Theresa", 41, 60)
    };

    public void main(String[] args) {
        System.out.println("test");
        String s = StdIn.readLine();
        String[] temp = s.split(" ");
        ArrayList<Integer> nums = new ArrayList<Integer>(5);
        for (int i = 0; i < 5; i++) {
            nums.add(Integer.parseInt(temp[i]));
        }
        ArrayList<member> mems = new ArrayList<member>(Arrays.asList(members));

        for (int n : nums) {
            for (member m : mems) {
                if (n > m.min && n < m.max) {
                    System.out.println(m.name + " : " + n);
                    nums.remove(n);
                    mems.remove(m);
                }
            }
        }
        for (int n : nums) {
            member m = mems.remove(0);
            System.out.println(m.name + " : " + n);
        }
    }
}

摘自OP的评论:

java.lang.NullPointerException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav‌​a:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:27‌​2) 

最佳答案

我敢打赌,您的错误是您当前的主要方法不是静态的:

// this should be a static method
public void main(String[] args) {
  // ...
}

解决方案:将 main 方法设置为静态。

public static void main(String[] args) {
  // ...
}

修复此问题后,您将看到其他错误,主要是您尝试以静态方式访问非静态内容。要解决此问题,您需要为您的分配类(请重命名此分配,使其以大写字母开头)提供要调用的公共(public)方法,然后让您的主方法创建一个分配实例并调用这些方法。 p>

例如这里:

ArrayList<member> mems = new ArrayList<member>(Arrays.asList(members));

您正在尝试在静态上下文中使用非静态成员数组。您只想在分配类的公共(public)方法内处理它。或者使 members 静态。

关于Java 内部类 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749509/

相关文章:

java - 从 PHP 脚本调用 Java(或 python 或 perl)

java - 删除链表中偶数索引的值

java抛出检查异常?

mysql - 在 WSO2BPS 上执行 LoadTest 时出现 NullPointerExceptions

java - 调用 connection.rollback() 抛出 NullPointerException

java - 为什么@Autowired 在静态方法中不起作用

java - JFrame 的 NullPointerException

java - 如何判断DrJava正在执行哪些命令?

java - 计算对象的 'weight',howto

java - DrJava开关(字符串)问题