首页 > 解决方案 > 线程“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);

    }
}

标签: javainterface

解决方案


您正在传递一个包含 10 个元素的数组,Sequences.isPrime(obj);但仅初始化数组的 3 个元素。

当您遍历数组时,索引 3+ 将为空,因此会出现 NullPointerException。

您可以将数组的大小减少到 3 或使用 PrimeSequence 对象填充数组中的所有元素以消除 NPE。


推荐阅读