Member 12620828 Ответов: 2

"Thread dispatchuncaughtexception throwable"при отправке аргументов в методы с использованием массива объектов


package learn;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;

public class ClassList {
	int rollNo;
	 String name;

	void toEnter(int rollNo, String name1) throws IOException{
		if(name1!=null){

			this.name = name1;
			this.rollNo = rollNo;	
		}
		else 
			System.out.println("Name is null");
		System.exit(0);
	}

	public static void main(String[] args) throws IllegalArgumentException,
			IOException {
		// TODO Auto-generated method stub
		ClassList[] cobjt = new ClassList[10];
		int num = 0;
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Enter the number");
		try {
			num = Integer.parseInt(in.readLine());
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String name1=null;
		int rollNo;
		ArrayList<ClassList> arList = new ArrayList<ClassList>();
		for (int i = 0; i < num; i++) {
			System.out.println("Enter the Name");
			try {
				name1 = in.readLine();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("Enter the rollNo");
			rollNo = Integer.parseInt(in.readLine());

		cobjt[i].toEnter(rollNo, name1);
				
		}
		}
}


Когда дело доходит до вызова метода показывает нулевой указатель исключение.при отладке можно видеть сообщения об ошибке как-нить "dispatchuncaughtexception тому подобное"

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

попытка создать массив объектов и вызвать метод "toEnter" с аргументами во время выполнения.

2 Ответов

Рейтинг:
17

Mohibur Rashid

У вас есть еще несколько проблем с вашим кодом. Вы создаете массив списка классов из десяти, а затем читаете num с клавиатуры,но не проверяете.

Но причина вашей ошибки такова:
когда вы создаете вот так

cobjt = new ClassList[10];

вы создаете массив из 10. Но вы не создали отдельные объекты.
Итак, когда вы пытаетесь получить доступ к cobjt[0], который равен null, следовательно, NullPointerException
Итак, вы попробуете этот путь
cobjt[i] = new ClassList();
cobjt[i].toEnter(rollNo, name1);


В вашей функции toEnter вы написали код для выхода из запущенной программы.

Вы читаете name1 с помощью try catch, но вы не делаете то же самое для rollNo


Рейтинг:
11

Richard MacCutchan

// create an array of 10 references, but note that each reference is not initialised
		ClassList[] cobjt = new ClassList[10];
// ...
// what is this line for? arList is never used anywhere
		ArrayList<classlist> arList = new ArrayList<classlist>();
// ...
// you try to call a method on a null reference. 
		cobjt[i].toEnter(rollNo, name1);

// You must first initialise that reference with a 
// new instance of a ClassList object thus:
		cobjt[i] = new ClassList();
		cobjt[i].toEnter(rollNo, name1);


</classlist></classlist>


Я предлагаю пройти через это Учебники По Java[^].