Почему Java выдает здесь исключение NullPointerException?
325 просмотра
5 ответа
public class Test {
public int [] x;
public Test(int N)
{
int[] x = new int [N];
for (int i=0;i<x.length;i++)
{
x[i]=i;
StdOut.println(x[i]);
}
}
public static void main(String[] args) {
String path = "/Users/alekscooper/Desktop/test.txt";
In reader = new In(path);
int size=reader.readInt();
StdOut.println("Size = "+size);
Test N = new Test(size);
StdOut.println(N.x[3]);
}
/* ADD YOUR CODE HERE */
}
Привет ребята. Я изучаю Java, читая книгу Роберта Седжвика об алгоритмах, и я использую его библиотеки, например, StdOut. Но вопрос о Java в целом. Я не понимаю, почему Java здесь генерирует исключение NullPointerException. Я знаю, что это вообще означает, но я не знаю, почему это здесь, потому что вот что я делаю:
прочитать целое число из файла - размер массива в классе Test. В моем тестовом примере size = 10, так что ничего особенного не происходит.
распечатай это.
создать объект N типа Test. В этом объекте я думаю, что я создаю массив размера, который я только что прочитал из файла. Для забавы я инициализирую его от 0 до размера 1 и печатаю. Все идет нормально.
и вот где все это начинается. Так как мой класс общедоступен, и я запустил конструктор, я думаю, что у меня есть объект N, который в качестве атрибута имеет массив x с элементами размера. Однако , когда я пытаюсь обратиться к х, например,
StdOut.println (Nx [3]);
Java выбрасывает исключение NullPointerException.
Почему так? Пожалуйста, помогите и большое спасибо за ваше время.
Автор: alekscooper1 Источник Размещён: 13.11.2019 11:48Ответы (5)
9 плюса
то, что вы сделали, называется слежкой за вашим полем x
с локальной переменной x
. так что все, что вам нужно сделать, это избежать этого:
int[] x = new int [N];
неверно, если вы хотите, чтобы ваше поле инициализировалось вместо локальной переменной, вы можете сделать что-то вроде: x = new int [N];
для получения дополнительной информации прочитайте это
4 плюса
изменить первую строку в конструкторе
int[] x = new int [N];
в
x = new int [N];
он должен работать...
На самом деле в конструкторе, когда вы говорите, что int [] x, он создает еще одну локальную переменную, вместо того, чтобы установить данные в публичную переменную x ... если вы удалите int [] из первой строки конструктора, он инициирует открытую переменную, и вы сможете напечатать их в методе main ()
Автор: Pavan Kumar K Размещён: 01.06.2015 07:282 плюса
Внутри public Test(int n)
:
+ Изменить
int[] x = new int [N]; // Creating a local int array x
в
x = new int [N]; // Assigning it to x
Автор: almightyGOSU
Размещён: 01.06.2015 07:25
2 плюса
Каждый дал код, который будет работать. Но причина в том, что называется переменной областью видимости. Когда вы создаете переменную (говоря int [] x, вы объявляете x как целочисленный массив, а говоря x = new int [4], вы назначаете новый массив для x). Если вы везде используете одно и то же имя переменной x и продолжаете присваивать ему разные значения, оно будет одинаковым во всем классе.
Но, если вы объявите int [] x еще раз - тогда вы создадите еще одну переменную с именем x - теперь это может привести к ошибке дублирующейся переменной или если вы объявите в более узкой «области видимости», вы будете переопределять ваше предыдущее объявление х.
Пожалуйста, ознакомьтесь с областями действия Java-переменных, чтобы понять, как работает область видимости.
Автор: Praba Размещён: 01.06.2015 07:380 плюса
int size=reader.readInt(); // size < 3
StdOut.println(N.x[3]); // length of x[] less than 3, so x[3] case NullPointException
Автор: finesse
Размещён: 01.06.2015 07:25
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- java Библиотека Java SWIFT
- java Выключение компьютера
- java Как я могу воспроизвести звук на Java?
- java Когда выбирать отмеченные и непроверенные исключения
- exception Неужели так плохо поймать общее исключение?
- exception Возвращаясь из блока finally в Java
- exception Как сбросить InnerException без потери трассировки стека в C #?
- exception Когда для конструктора правильно выбрасывать исключение?
- exception Работа с ошибкой "java.lang.OutOfMemoryError: PermGen space"
- exception Почему переменные не объявлены в «try» в области «catch» или «finally»?
- exception Какие и почему вы предпочитаете исключения или коды возврата?
- exception Причины получения java.lang.VerifyError
- exception Обобщенная обработка исключений в Python "Правильный путь"