Yuxi Long Ответов: 1

Исключение Nullpointerexception в этой функции


Привет сообщество CodeProject,

Я пытаюсь создать экземпляр матрицы элемента. Но когда я вызываю определенный элемент в Матрице, он возвращает Null (или NullPointerException при вызове метода). Вот упрощенная версия моего кода, которая все еще возвращает Null. Интересно, в чем причина этой проблемы. Спасибо!

С уважением

Что я уже пробовал:

public class MyProgram extends ConsoleProgram
{

    public void run()
    {
        someClass[][] sc = new someClass[1][2];
        System.out.println(sc[0][0].getX());
    }
    
}

public class someClass
{
    
    private int x = 0;
    public someClass()
    {
 
    }
    
    public int getX()
    {
        return x;
    }
}

1 Ответов

Рейтинг:
11

Mohibur Rashid

ваша проблема заключается в выполнении функции

Вот что вы сделали

public void run()
{
       someClass[][] sc = new someClass[1][2]; // you have allocated some space for the array itself;
       System.out.println(sc[0][0].getX()); // accessing here is a violation
       // since you have not initialize space for each object; hence before you start accessing you need to initialize.
}

иначе говоря
sc[0][0] = new someClass();


При объявлении массива примитивных переменных java устанавливает для этой переменной значение по умолчанию. А для всех классов и строк по умолчанию используется значение null. Следуйте этому примеру, чтобы лучше понять
public class Klass {
    public int x=10;
    public static void main(String []args) {
        int []i = new int[2];
        char []c=new char[2];
        Klass []k=new Klass[2];
        String s[] = new String[2];
        System.out.println(i[0] + " " + i[1]);
        System.out.println(c[0] + " " + c[1]); // in this case c is set to zero
        System.out.println(s[0] + " " + s[1]);
        System.out.println(k[0] + " " + k[1]);
        try {
          System.out.println(k[0].x); // since k is null it will thow exception
        } catch(NullPointerException e) {
            e.printStackTrace();
        }
        k[0] = new Klass();
        System.out.println(k[0].x); // You will see some result
    }
}


Yuxi Long

Спасибо!