我构建了一个方法,用于将对象属性与用户输入int进行比较。然后,该方法将所有对象添加到数组中(赋值要求它是Array而不是ArrayList)。添加之后,我有一个foor-loop,它打印出一个运动员的结果列表(在用户输入中),它打印出一个类别的所有结果,然后是另一个类别等等......
我在最后一行是System.out.println时遇到NullPointerException错误。我已经搜索了几个小时的答案,并在这里阅读了NullPointerException帖子,但无法找到问题或解决它。
for (int x = 0; x < category.size(); x++) {
Category c = categories.get(x);
System.out.println("Result in " + c.categoryName() + " for " + matchedAthlete.surName() + " "
+ matchedAthlete.lastName() + ": ");
for (int i = 0; i < individarrayresult.length; i++) {
Result res = individarrayresult[i];
if (res.nameOfCategory().equals(c.categoryName())) {
System.out.println(res.categoryResult());
}
}
}
所以最后一行代码(System.out.println)得到了NullPointerException,我很想得到帮助。下面是仅有1名运动员的阵列。
Result[] individarrayresult = new Result[resultlist.size()];
for (int i = 0; i < resultlist.size(); i++) {
Result res = resultlist.get(i);
if (res.athleteStartNumber() == DSN) {
individarrayresult[i] = res;
}
}
答案 0 :(得分:3)
如果该行有NullPointerException
:
System.out.println(res.categoryResult());
问题在方法categoryResult
中,因为 res不为空,除了之前的测试
if (res.nameOfCategory().equals(c.categoryName())) {
必须在System.out之前抛出NullPointerException。
请检查categoryResult()
的代码或发布。
也许,正如T.J.说,问题不在那一行,而是在前一行,NullPointerException与res的值有关。发布代码的完整StackTrace和行行以确保答案。
答案 1 :(得分:2)
我认为你错了,我认为你早些时候在这条线上获得NPE一行:
if (res.nameOfCategory().equals(c.categoryName())) {
你获得它的原因是你的数组中有null
个,因为你是如何填充的:
Result[] individarrayresult = new Result[resultlist.size()];
for (int i = 0; i < resultlist.size(); i++) {
Result res = resultlist.get(i);
if (res.athleteStartNumber() == DSN) {
individarrayresult[i] = res;
}
}
如果res.athleteStartNumber() == DSN
为false,则永远不会向individarrayresult[i]
分配任何内容,以便数组条目保持其null
默认值。
如何修复它:
建立匹配结果列表:
List<> individResults = new Arraylist<Result>(resultlist.size());
for (int i = 0; i < resultlist.size(); i++) {
Result res = resultlist.get(i);
if (res.athleteStartNumber() == DSN) {
individResults.add(res);
}
}
...然后直接使用该列表,或将其转换为数组:
Result[] individarrayresult = individResults.toArray(new Result[individResults.size()]);
...并使用生成的数组。
(你也可以在最新版本的Java中使用漂亮的新流程做同样的事情,但我并不是真的与他们相处......)
当然,您可能会在您说过的线路上获得NPE并且存在两个问题,并且它恰好发生在您身上#39到目前为止,我们一直在处理所有DSN条目。如果是这样,并且您修复了另一个问题,那么当您第一次拥有非DSN条目时,除非同时修复此问题,否则您将遇到此问题。