首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java内部类NullPointerException

Java内部类NullPointerException
EN

Stack Overflow用户
提问于 2013-11-03 03:20:46
回答 2查看 1.7K关注 0票数 0

我正在编写一个简短的Java程序,它应该包含5个整数的列表,并将每个整数分配给6个成员中的一个。我希望最大限度地增加在minmax值之间接收值的成员的数量。

无论如何,由于一些我不知道的原因,我的私人member类似乎正在抛出一个NullPointerException,但是我完全不知道为什么。如有任何建议,将不胜感激。

代码语言:javascript
复制
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的评论:

代码语言:javascript
复制
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) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-03 03:35:03

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

代码语言:javascript
复制
// this should be a static method
public void main(String[] args) {
  // ...
}

解决方案:使主要方法保持静态状态。

代码语言:javascript
复制
public static void main(String[] args) {
  // ...
}

一旦修复了这个问题,您将看到其他错误,主要是试图以静态的方式访问非静态的东西。要解决这个问题,您需要为assign (请重命名此赋值,以便它以大写字母开头)提供要调用的公共方法,然后让您的main方法创建一个Assign实例并调用这些方法。

例如,在这里:

代码语言:javascript
复制
ArrayList<member> mems = new ArrayList<member>(Arrays.asList(members));

您正在尝试在静态上下文中使用非静态成员数组。您将只想在赋值类中,在它的公共方法中处理它。或者让members成为静态的。

票数 3
EN

Stack Overflow用户

发布于 2013-11-03 05:13:54

第一个大问题,就像每个人一样,如果没有静态main,您的代码如何运行?

您的代码有很多流,请重新检查逻辑,并尝试对代码运行不同的测试用例(有效的测试用例,然后是无效的测试用例)。这是一个很好的问题陈述。

作为一个例子

代码语言:javascript
复制
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);
                }
            }
        }

你让ConcurrentModificationException等着发生。

你确定你想要这一行: nums.remove(n);

IndexOutOfBoundsException.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19749509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档