java - 线程“main”java.lang.NullPointerException 中的异常:无法调用“Sequence.getValue()”,因为“obj”为空
问题描述
我收到以下输出/错误。在元素 0、1 和 2 处将三个数字输入到数组中,但它显示 'obj' 为空。这些正在输入的数字应该出现在“obj”数组中,但它们不是。相反,'0' 不断出现在所有这三个元素位置。
0 is not a prime number.
0 is not a prime number.
0 is not a prime number.
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Sequence.getValue()" because "obj" is null
at Sequences.isPrime(Sequences.java:10)
at SequencesDriver.main(SequencesDriver.java:11)
界面:
public interface Sequence
{
int getValue();
}
班级:
import java.util.ArrayList;
public class PrimeSequence implements Sequence
{
private int prime;
ArrayList<Integer> list = new ArrayList<Integer>();
public PrimeSequence(int n)
{
list.add(n);
}
public int getValue()
{
return prime;
}
}
班级:
public class Sequences
{
public static void isPrime(Sequence[] object)
{
for (Sequence obj : object)
{
int i, m = 0, flag = 0;
m = obj.getValue() / 2;
if (obj.getValue() == 0 || obj.getValue() == 1)
{
System.out.println(obj.getValue() + " is not a prime number.");
}
else
{
for (i = 2; i <= m; i++)
{
if (obj.getValue() % i == 0)
{
System.out.println(obj.getValue() + " is not a prime number.");
flag = 1;
break;
}
}
if (flag == 0)
{
System.out.println(obj.getValue() + " is a prime number.");
}
}
}
}
}
测试/驱动程序:
public class SequencesDriver
{
public static void main(String[] args)
{
Sequence[] obj = new Sequence[10];
obj[0] = new PrimeSequence(3);
obj[1] = new PrimeSequence( 5);
obj[2] = new PrimeSequence(6);
Sequences.isPrime(obj);
}
}
解决方案
您正在传递一个包含 10 个元素的数组,Sequences.isPrime(obj);
但仅初始化数组的 3 个元素。
当您遍历数组时,索引 3+ 将为空,因此会出现 NullPointerException。
您可以将数组的大小减少到 3 或使用 PrimeSequence 对象填充数组中的所有元素以消除 NPE。
推荐阅读
- sql - Postgres - 管理绑定表中项目顺序的最佳方法
- flask - 移动 safari 独立 pwa 无法从范围内下载文件
- android - 将 Facebook Messenger 消息发送到 Android
- neural-network - 试图理解这个 Encoder-Decoder NN 表示
- c - 警告:从不兼容的指针类型 [-Wincompatible-pointer-types] 传递“...”的参数 1
- c# - 如何更改 Photon 中特定播放器的设置?
- flutter - Flutter web - 上传到服务器时地理定位器不起作用
- c++ - CMake 和 Assimp 的问题
- python - 我不能重复循环,因为 int 或 float 对象不可调用
- go - go-staticcheck:应该使用简单的通道发送/接收而不是选择单个案例(S1000)