Good evening! I'm having a problem with a college work, which is seemingly simple (though I'm very noob in Java, and I do not know what to do!).
I'd like you to help me, I'm getting Null Pointer Exception when calling menu number 3 after creating new contacts. And I also need help to encode the function fetchphones, which has an array as a return (I have no idea how to do this). Thanks in advance for your understanding and help!
PS: Any suggestions will be welcome
packageagenda.de.telefones;importjava.util.Scanner;publicclassControlador_AgendaDeTelefones{publicstaticvoidmain(String[]args){Agendaagenda=newAgenda();Scannerentrada=newScanner(System.in);while(true){System.out.println("1 - Incluir Contato");
System.out.println("2 - Alterar Contato");
System.out.println("3 - Alterar Telefone");
System.out.println("4 - Buscar Contato");
System.out.println("9 - Sair");
int opcao = entrada.nextInt();
switch(opcao){
case 1: //Incluir contato
System.out.println("Voce escolheu: Incluir Contato!");
System.out.println("Digite o nome do contato: ");
String nome1 = entrada.next();
System.out.println("Digite o numero do contato: ");
String numero1 = entrada.next();
System.out.println("Digite o tipo de telefone: ");
String tipo1 = entrada.next();
Contato c = new Contato(nome1);
Telefone t = new Telefone(numero1, tipo1);
int status1 = agenda.novoContato(c, t);
if(status1 == 1){
System.out.println("Contato incluido com sucesso!");
}else{
System.out.println("O contato não pode ser incluso por falta de espaço");
}
break;
case 2://Alterar Contato
System.out.println("Voce escolheu Alterar Contato!");
System.out.println("Digite o nome do contato a ser alterado: ");
String nome2 = entrada.next();
System.out.println("Digite o novo nome do contato: ");
String novoNome2 = entrada.next();
int status2 = agenda.alterarContato(nome2, novoNome2);
if(status2 == 1){
System.out.println("Contato alterado com sucesso!");
}else{
System.out.println("O contato não pode ser alterado!");
}
break;
case 3://Alterar Telefone
System.out.println("Voce escolheu Alterar Telefone!");
System.out.println("Digite o nome do contato que deseja alterar o telefone:");
String nome3 = entrada.next();
System.out.println("Digite o numero que deseja alterar: ");
String numero3 = entrada.next();
System.out.println("Digite o novo numero desejado: ");
String novoNumero3 = entrada.next();
int status3 = agenda.alterarTelefone(nome3, numero3, novoNumero3);
if(status3 == 1){
System.out.println("Contato alterado com sucesso!");
}else{
System.out.println("O contato não pode ser alterado!");
}
break;
case 4://Buscar Contato
System.out.println("Voce escolheu Buscar Contato!");
System.out.println("Digite o nome do contato que deseja buscar:");
String nome4 = entrada.next();
agenda.buscarContato(nome4);
//terminar
break;
case 9:
System.exit(0);
default:
System.out.println("Opcao Invalida! Tente outra vez.");
break;
}
}
}
}
Then there are the other classes:
package agenda.de.telefones;
public class Agenda {
private String dono;
Contato contato = new Contato();
Telefone telefone = new Telefone();
private Contato[] meusContatos;
private int numContatos;
// controla a posiçao do array meusContatos
private Telefone[] meusTelefones;
private int numTelefones;
// controla a posiçao do array meusTelefones
//métodos construtores
public Agenda(){
meusContatos = new Contato[50];
numContatos = 0;
meusTelefones = new Telefone[50];
numTelefones = 0;
}
//métodos de acesso
public String getDono(){
return dono;
}
public void setDono(String dono){
this.dono = dono;
}
//métodos delegados
public void mostrarDados(){
}
public int novoContato(Contato c1, Telefone t){
int retorno = 0;
if(numContatos < 50){
c1.associarTelefone(t);
this.meusContatos[numContatos] = c1;
numContatos++;
numTelefones++;
retorno = 1;
}
return retorno;
}
public int alterarContato(String nome1, String novoNome1){
int retorno = 0;
for(int i = 0; i<numContatos; i++){
if(this.meusContatos[i].getNome().equals(nome1)){
meusContatos[i].setNome(novoNome1);
retorno = 1;
}
}
return retorno;
}
public int alterarTelefone(String nome3, String numero3, String novoNumero3){
int retorno = 0;
for(int i = 0; i<numContatos; i++){
if(this.meusContatos[i].getNome().equals(nome3)){
retorno = contato.alterarTelefone(numero3, novoNumero3, i);
}
}
return retorno;
}
public void buscarContato(String nome4){
for(int i = 0; i<numContatos; ++i){
if(this.meusContatos[i].getNome().equals(nome4)){
System.out.println("Numero: "+meusTelefones[i].getNumero());
}
}
}
}
package agenda.de.telefones;
public class Contato {
private String nome;
private Telefone[] meusTelefones;
private int numTelefones;
// controla a posiçao do array meusTelefones
//métodos construtores
public Contato(){
meusTelefones = new Telefone[50];
numTelefones = 0;
}
public Contato(String nome){
this.nome = nome;
meusTelefones = new Telefone[50];
numTelefones = 0;
}
//métodos de acesso aos atributos (getters e setters)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
//metodos delegados
public void mostrarDados(){
System.out.println("Nome: " + this.nome);
}
public int alterarTelefone(String numero3, String novoNumero3, int i){
int retorno = 0;
if(this.meusTelefones[i].getNumero().equals(numero3)){
meusTelefones[i].setNumero(novoNumero3);
retorno = 1;
}
return retorno;
}
public void associarTelefone(Telefone t){
meusTelefones[numTelefones] = t;
numTelefones++;
}
/*
public Array[Telefone] buscarTelefone(){
Está comentado porque realmente não sei o que fazer :(
}*/
}
package agenda.de.telefones;
public class Telefone {
private String numero;
private String tipo;
//métodos construtores
public Telefone(){
}
//métodos de acesso aos atributos (getters e setters)
public Telefone(String numero1, String tipo1){
this.numero = numero1;
this.tipo = tipo1;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public void mostrarDados(){
System.out.println("Numero: "+this.numero);
System.out.println("Tipo: "+this.tipo);
}
}