提问人:Samik Pandit 提问时间:3/9/2023 更新时间:3/9/2023 访问量:47
通过类查找数组中元素的频率可能导致 NULL 指针异常的问题是什么?
What may be the problem for finding frequency of elements in array through class leading to NULL Pointer Exception?
问:
此代码查找数组中元素的频率。但它显示无法读取字段,因为数组为 null。
法典
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner lta = new Scanner(System.in);
Count[] arr = new Count[101];
System.out.println("Enter the elements :");
for (int i = 0;i < 10;i++){
int value = lta.nextInt();
arr[value].count += 1;
}
System.out.println("Frequency of the elements in the array :");
for (int i = 1;i < arr.length;i++){
if (arr[i].count > 0){
System.out.print(i + " : " + arr[i].count);
System.out.println();
}
}
}
static class Count{
long value;
long count;
}
}
错误
Exception in thread "main" java.lang.NullPointerException: Cannot read field "count" because "arr[value]" is null
是否有任何解决方案可以让该程序运行而不会出现任何错误,或者 JAVA 程序终止的原因是什么。
答:
1赞
John Williams
3/9/2023
#1
您只填充了前 10 个元素,但读取了前 101 个元素。arr.length 为 101,因为 arr = new Count[101]。
与写入循环一样,读取循环需要在 i < 10 处停止
1赞
tbatch
3/9/2023
#2
arr[i].count
正在尝试访问在数组索引处的对象中调用的字段。您已经初始化了数组,但它是空的。您可以通过简单打印 来检查这一点,这将返回 null。count
i
array[0]
若要解决此问题,请在尝试访问数组之前初始化数组的元素。
for (int i = 0 ; i < 10 ; i++){
int value = lta.nextInt();
arr[value] = new Count();
arr[value].count += 1;
}
但请注意,这将中断下一个循环。这是因为您只初始化数组中的 10 个索引,但尝试访问所有 102 个索引。
通常,初始化一个大于所需值的数组是一种糟糕的编程实践。如果您计划只允许输入 10 个值,则将数组初始化为 10。然后在两个循环中使用数组的长度。
评论