Erro no programa

3 respostas
Michel_Wagnerjm

Bom dia, estou com uma parte do código do algoritmo KMeans em java que fiz e o mesmo dá os seguintes erros:

Exception in thread main java.lang.NullPointerException

at Principal.proteina_inicializa(Principal.java:27)

at Principal.main(Principal.java:271)
O trecho que lança esses erros é o seguinte:

Scanner scanner;

try {

scanner = new Scanner(new File(database2.data));

scanner.useDelimiter("  ");

for (a = 0; a < Constantes.m; a++){

proteina[a].nome = scanner.next(); (AQUI LANÇA UM ERRO!!!)

proteina[a].posicao[0] = scanner.nextFloat();

proteina[a].posicao[1] = scanner.nextFloat();

proteina[a].posicao[2] = scanner.nextFloat();

proteina[a].posicao[3] = scanner.nextFloat();

proteina[a].posicao[4] = scanner.nextFloat();

proteina[a].posicao[5] = scanner.nextFloat();

proteina[a].posicao[6] = scanner.nextFloat();

proteina[a].posicao[7] = scanner.nextFloat();

proteina[a].classe = scanner.next();

scanner.close();

}

} catch (FileNotFoundException e) {
e.printStackTrace();
	}

e na seguinte parte tbm:
public static void main(String args[]){

Proteina[] proteina = new Proteina[Constantes.m];
	Centroide[] centroide = new Centroide[Constantes.k];

	float[][] tabela_distancia = new float[Constantes.m][Constantes.k];
	float[][] tabela_proximidade = new float[Constantes.m][2];
	float custo_pre;


	
	float custo_pos = 0;

	int a;
	int b;
	int iteracao = 0;
	int iteracao2 = 1;

	
	proteina_inicializa(proteina); (AQUI LANÇA UM ERRO)

Se puderem me ajudar, eu agradeço!!!

3 Respostas

pmlm

Estás a tentar escrever o atriobuto nome de um elemento que não existe. Tens de criar primeiro um elemento para essa posição:
proteina[a] = new Proteina();

Michel_Wagnerjm

Este vetor está inicializado nesse método:

public static void main(String args[]) throws IOException{

Proteina[] proteina = new Proteina[Constantes.m];
	Centroide[] centroide = new Centroide[Constantes.k];

	float[][] tabela_distancia = new float[Constantes.m][Constantes.k];
	float[][] tabela_proximidade = new float[Constantes.m][2];
	float custo_pre;


	
	float custo_pos = 0;

	int a;
	int b;
	int iteracao = 0;
	int iteracao2 = 1;

	
	proteina_inicializa(proteina);
pmlm

O vetor tem m posições a null, tens de criar um objeto para cada posição antes de tentares aceder ao objeto dessa posição.

Criado 3 de março de 2016
Ultima resposta 3 de mar. de 2016
Respostas 3
Participantes 2