我正在编写一个简短的Java程序,该程序应该包含5个整数的列表,并将每个程序分配给6个成员中的一个。我希望最大化在min
和max
值之间获得价值的成员数量
无论如何,由于某些我不知道的原因,我的私有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.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
答案 0 :(得分:3)
我打赌您的错误是您当前的主要方法不是静态的:
// this should be a static method
public void main(String[] args) {
// ...
}
解决方案:使main方法保持静态。
public static void main(String[] args) {
// ...
}
修复此问题后,您会看到其他错误,主要是您尝试以静态方式访问非静态内容。要解决这个问题,你需要给你的assign类(请重命名为Assign以使它以大写字母开头)公共方法调用,然后让你的main方法创建一个Assign实例并调用这些方法。
例如:
ArrayList<member> mems = new ArrayList<member>(Arrays.asList(members));
您尝试在静态上下文中使用非静态成员数组。您只希望在其公共方法内部的Assign类中处理它。要么是members
静态的。
答案 1 :(得分:0)
第一个大问题,就像每个人如何在没有静态主程序的情况下运行代码?
你的代码有很多流量, 请重新审视逻辑并尝试针对您的代码运行不同的测试用例(有效的,然后是无效的)。这是一个很好的问题陈述。
作为一个例如
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异常强>