1
Good evening! I’m having a problem with a college job, which is apparently simple (however, I’m very Noob in Java, and I don’t know what to do!).
I would like you to help me, I am receiving Null Pointer Exception by calling the number 3 on the menu, after creating new contacts. And I also need help to encode the function searchTelephones, which has an array as return(I have no idea how to do that). From now on, I thank everyone for their understanding and help!
PS: Any suggestion will be welcome
package agenda.de.telefones;
import java.util.Scanner;
public class Controlador_AgendaDeTelefones {
public static void main(String[] args) {
Agenda agenda = new Agenda();
Scanner entrada = new Scanner(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);
}
}
Thanks for the explanation and for the example of array with Arraylist, did not know how to use it, and also did not know the foreach, very good! But for a function to return an array, would I just do "list" (using your example code) ? Is that correct ? Again, Thank you!
– Jo Hell
This you said and also specify the return type of the method in the signature of the same. Note that in the example I used an executable class and from main you can not return anything because the class is static and returns void(void). You need to create another class that is not executable, create an object with the new calling the method that returns your list. The signature of a method that returns an Arraylist can be, for example, like this: public List<String> getLista() ? ... } with return of the list at the end as you said. See example in the answer edited just above.
– Antonio Alexandre
Thank you very much! Work was presented, and your comment helped a lot in my learning. Valew! :)
– Jo Hell