Я хотел бы обратиться за помощью к моему проекту. Я программист новичков, и я не получаю эту ошибку "exception in thread main java.lang.nullpointerexception"
это мой код:
public class Slumbook{
public String codeName;
public Slumbook(){
//
}
public Slumbook(String codeName){
this.codeName = codeName;
}
public String getCodeName(){return codeName;}
public void setCodeName(String codeName){this.codeName = codeName;}
}
И код Driver Program
: -
import java.util.*;
public class SlumbookD{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Slumbook[] slum = new Slumbook[20];
for(int n=0; n<10; n++){
slum[n].setCodeName(sc.nextLine());
}
}
}
Перед использованием необходимо инициализировать элементы массива.
Slumbook[] slum = new Slumbook[20];
for(int n=0; n<10; n++){
slum[n] = new Slumbook();
slum[n].setCodeName(sc.nextLine());
}
Вы можете инициализировать все элементы массива сразу, чтобы избежать любых будущих Исключений
Slumbook[] slum = new Slumbook[20];
for(int i = 0 ; i < slum.length ; i++) //initializing all the elements
slum[i] = new Slumbook();
for(int n=0; n<10; n++){
slum[n].setCodeName(sc.nextLine());
}
Вы выделили массив... но вам не удалось выделить какие-либо объекты, содержащиеся в массиве.
ПРЕДЛОЖЕНИЕ:
import java.util.*;
public class SlumbookD {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Slumbook[] slum = new Slumbook[20];
for(int n=0; n<slum.length; n++){
slum[n] = new Slumbook(sc.nextLine);
}
}
}
... ИЛИ ЛУЧШЕ...
// You only need one class - with it own main(). Not two classes...
public class Slumbook{
public String codeName;
public Slumbook(String codeName){
this.codeName = codeName;
}
public String getCodeName(){
return codeName;
}
public void setCodeName(String codeName){
this.codeName = codeName;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Slumbook[] slum = new Slumbook[20];
for(int n=0; n<slum.length; n++){
slum[n] = new Slumbook(sc.nextLine);
}
}
}
Вы создали пустой массив, но не инициализировали его, вам нужно связать ссылку на объект в индексе массива, а затем вы можете вызвать любое количество методов setter для этого индекса.
Slumbook[] slum = new Slumbook[20];
for(int n=0; n<10; n++){
slum[n] = new Slumbook(); // Instantiate Slumbook class and assign reference
slum[n].setCodeName(sc.nextLine());
}
NullPointerException
, потому что этот вопрос задают ВСЕ ВРЕМЯ.slum[n]
еще не было создано; то есть это нулевая ссылка / указатель. Чтобы исправить это, создайте экземпляр каждого элемента вslum
прежде чем пытаться установить его кодовое имя.