Java - Null Pointer Exception como resolver?

Boa tarde pessoal, esta dando um erro que não consigo solucionar em java que é o Exception in thread “main” java.lang.NullPointerException
at a.Cadastro.main(Cadastro.java:20).

Se alguém puder me ajudar eu agradeço.

package a;
import java.util.Scanner;

public class Cadastro {

public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	Usuario vetor[];
	vetor = new Usuario[10];
	int opcao=0, condicao=0;
	
	
	System.out.println("Digite uma opção\n"+"1 - Cadastrar\n"+"2 - Listar\n"+ "3 - Sair\n");
	opcao = in.nextInt();
	switch (opcao){
	case 1:
		System.out.println("Cadastro");
		for(int i=0; i<10; i++) {
			System.out.println("Nome: ");
			vetor[i].nome = in.next();
			System.out.println("Login: ");
			vetor[i].login = in.next();
			System.out.println("Senha: ");
			vetor[i].senha = in.next();
			System.out.println("Deseja cadastrar mais algum usuário? Sim=1 <> Não=0");
			if(condicao==1){
				
			}else {
				break;
			}
		}
		break;
	case 2:
		System.out.println("Opção2");
		break;
	case 3:
		System.out.println("Opção3");
		break;
	}
}

}

Olá, Thiago! Bem vindo ao GUJ, espero que goste do fórum.

A exception Null Pointer (Exceção de Ponteiro Nulo) acontece quando você tenta usar/acessar um atributo ou variável que seja Nula. Ser nula significa não ter valor ou referência atribuida a ela.

Para poder te ajudar melhor, poste a classe Usuário também.

Concordo com tudo o que o @FearX disse.
Acrescento que quando você instancia um vetor de objetos, todas as suas posições são nulas.

A linha acima indica que você tem 10 espaços de memória prontos a receber objetos do tipo Usuario, porém, todas vazias.
Quando você tenta acessar um atributo de um objeto que supostamente estaria numa posição do vetor, nesta linha

Vai ter o NPE, pois vetor[i] nunca foi instanciado. Antes de tentar invocar ou definir valor a qualquer atributo, insira essa linha

vetor[i] = new Usuario();

Ah, em tempo, essas linhas

poderiam ser uma só

Usuario vetor[] = new Usuario[10];

Dá na mesma e diminui a verbosidade.

2 curtidas

Obrigado @FearX , já venho tirando duvidas a algum tempo aqui, porém, só agora eu fiz uma conta hehe. Acho que entendi o problema @darlan_machado , mas como foi pedido vou postar a classe Usuario pra vocês darem uma olha.

package a;

public class Usuario {

String login;
String nome;
String senha;

}

@FearX @darlan_machado consegui! Eu criei um novo objeto para cada posição do vetor e foi

public class Cadastro {

public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	Usuario vetor[];
	vetor = new Usuario[10];
	int opcao=0, condicao=0;
	
	
	System.out.println("Digite uma opção\n"+"1 - Cadastrar\n"+"2 - Listar\n"+ "3 - Sair\n");
	opcao = in.nextInt();
	switch (opcao){
	case 1:
		System.out.println("Cadastro");
		for(int i=0; i<10; i++) {
			vetor[i] = new Usuario();
			System.out.println("Nome: ");
			vetor[i].nome = in.next();
			System.out.println("Login: ");
			vetor[i].login = in.next();
			System.out.println("Senha: ");
			vetor[i].senha = in.next();
			System.out.println("Deseja cadastrar mais algum usuário? Sim=1 <> Não=0");
			condicao = in.nextInt();
			if(condicao==1){
				
			}else {
				break;
			}
		}
		break;
	case 2:
		System.out.println("Opção2");
		break;
	case 3:
		System.out.println("Opção3");
		break;
	}
}

}

1 curtida