我正在尝试将一个类中的数组元素用于另一个类。没有错误发生但它不打印任何值。这是我的代码。
public class Cow implements Animal {
public ArrayList<cage> getSchedule(ArrayList<cage> cages) {
for(int a = 0; a < cages.size(); a++) {
Cage ct = (Cage)cages.get(a);
A[a]=ct.getStart();
B[a]=ct.getEnd();
}
return null;
}
}
现在我试图在名为"KnapsackSolver"
的另一个类中调用数组A []和B []。我从arraylist复制代码直到返回null并且它没有显示错误。但是当我尝试在knapsackSolver类中打印A[]
和B[]
时,它不打印任何内容,而是在控制台"Exception in thread "main" java.lang.NullPointerException"
上说出一条消息。
请帮助我如何在KnapsackSolver
类中使用A和B数组的值。澄清A和B中的数据是双重类型及其声明我没有在这里显示以节省空间和时间。期待一些建议。
答案 0 :(得分:0)
我认为您使用return cages;
而不是return null;
之类的内容我认为这跟principle of least surprise一样,并允许Method chaining。此外,您的ArrayList<cage>
几乎肯定是ArrayList<Cage>
- 但我更喜欢更通用的List<Cage>
甚至Collection<Cage>
。最后,一个Cage(s)数组将是Cage[] cages;
- ArrayList(s)由数组支持,但它们与数组不同。您是否在toString()
中实施了Cage
?我也会推荐这个。
答案 1 :(得分:0)
冒着听起来很苛刻的风险,你的代码片段中有很多东西给我的印象是你只是从编程开始。 它没有任何问题,你只需要知道你正在进入的内容:)
在java中,通常的做法是让您的类名以大写字母开头(在您的示例中,Cow
而不是cow
)。
此外,在您的示例中,尽可能使用界面来尝试使用OO编程的强大功能,而不是使用List
而不是ArrayList
。
有人说,如果编程中的一些难题,命名是一个。例如,我们通常将索引命名为i
,j
,k
......我们从不以a
开头。
然后是你的函数的返回值。它被输入为List
,但它总是返回null
。你可能想要将返回值更改为void
(不返回任何内容)或实际返回列表,甚至是空的。
我还有一种印象,即您正在使用A
和B
来返回您的日程安排,这通常不是一个好主意(除了您命名一个函数得到的不是得到你的任何东西,你也使用实例属性在函数之间传输值,并创建2个变异的相关数组,而不是单个的Schedules数组)
现在,回到你的问题,我希望看到A
和B
的完整声明,但我怀疑它们不是在任何地方被定义,或者你是尝试使用方法的返回值,该值始终为null
。那个,或者cages是未初始化对象的列表(如果getStart
或getEnd
返回null Double
,A
和B
是{{1} },你会得到一个NPE)