Cannot find symbol

Olá, estou no começo de implementar o ArrayList em um código que já tenho pronto, mas estou com alguns impasses. Quando executo ele recebo este erro:

ShowTime.java:52: error: cannot find symbol
System.out.println("A sua idade e: " +bdCad.get(i).getIdadeUsu());
                                                          ^
  symbol:   method getIdadeUsu()
  location: class ImplementsBanda
1 error

E quando executo, com a linha do erro comentada, ele compila normal, porem ele não me da o nome que eu cadastro, ele apenas diz: “Seu nome e:” e não me diz o nome.

CÓDIGO:

import java.util.List;
import java.util.ArrayList;

public class ShowTime extends Banda {
	
	private static ImplementsBanda cad;
	private static List<ImplementsBanda> bdCad = new ArrayList<ImplementsBanda>();
	
	public static void main(String arg[]) {
		Banda b1 = new ImplementsBanda();
		Entrada entrada = new Entrada();
		Integrante integran = new Integrante();
		boolean vai = true;
		int op = 0;
		
		while (vai) {
			cad = new ImplementsBanda();
			
			//==================== CADASTRO SIMPLES  =================
			System.out.println("\n\nCADASTRO SIMPLES");
			Usuario usuario = new Usuario();
			usuario.setNome(entrada.entDados("\nDiga o seu nome: "));
			usuario.setIdadeUsu(Integer.parseInt(entrada.entDados("Diga a sua idade: ")));
			
			bdCad.add(cad);
			
			System.out.println("\nTAMANHO DO ARRAY: "+bdCad.size());
			String resp = entrada.entDados("\n DESEJA REALIZAR MAIS UM CADASTRO? <s/n>");
			
			if (resp.equalsIgnoreCase("n")) {
				vai = false;
			}
		}
		
		for (int i = 0; i < bdCad.size(); i++) {
			//======================== CADASTRO INICIAL ========================
			System.out.println("\n\n>>>>>> CADASTRO DE USUARIO <<<<<<");
			System.out.println("Seu nome e: " +bdCad.get(i).getNome());
			System.out.println("A sua idade e: " +bdCad.get(i).getIdadeUsu());
		}
	}
}

Esse método existe na classe Usuario?

Também está faltando definir que tipo de lista é essa.
(lista de qual tipo de objeto)

1 curtida

Talvez seja a falta de formatação. O <> some se não formatar como código.

Sim. Vou postar o codigo:

public class Usuario extends Banda {

private int idadeUsu = 0;

//==========================================================

public int getIdadeUsu(){
return idadeUsu;
}

//==========================================================

public final void setIdadeUsu(int idadeUsu){
this.idadeUsu = idadeUsu;
}

}

private static List<ImplementsBanda> bdCad = new ArrayList<ImplementsBanda>();

agora sim!

bdCad é uma lista de ImplementsBanda.
O método get() vai te dar um objeto do tipo ImplementsBanda e esse não tem o método getIdadeUsu(), por isso dá o erro.

1 curtida

Nesse caso, oque você me aconselha a fazer? Desculpa, é que não ficou muito claro para mim

cad = new ImplementsBanda();  // VC NÃO FAZ NADA COM ESSE OBJETO

System.out.println("\n\nCADASTRO SIMPLES");
Usuario usuario = new Usuario();
usuario.setNome(entrada.entDados("\nDiga o seu nome: "));
usuario.setIdadeUsu(Integer.parseInt(entrada.entDados("Diga a sua idade: ")));

bdCad.add(cad); //add usuario aqui

O que faz sentido aqui é mudar o tipo da lista para Usuario (e adicionar o objeto usuario na lista), já que vc não tá fazendo nada com ImplementsBanda e ainda precisa do getIdadeUsu mais embaixo.

1 curtida

Obrigadoo, resolveu esse problema.

Agora dando andamento no meu projeto, preciso o numero de celular no cadastro, mas ele não está com o problema de antes, eu digito o numero e na hora de mostrar, ele não mostra o numero.

import java.util.List;
import java.util.ArrayList;

public class ShowTime extends Banda {

private static ImplementsBanda cad;
private static List bdCad = new ArrayList();

public static void main(String arg[]){

Banda b1 = new ImplementsBanda();
Entrada entrada = new Entrada();
Integrante integran = new Integrante();

boolean vai = true;
int op = 0;

while(vai){

cad = new ImplementsBanda();

//=================== CADASTRO SIMPLES, ANTES DA BANDA =================
System.out.println("\n\nCADASTRO SIMPLES");
Usuario usuario = new Usuario();
usuario.setNome(entrada.entDados("\nDiga o seu nome: "));
usuario.setIdadeUsu(Integer.parseInt(entrada.entDados("Diga a sua idade: ")));

try{

b1.setCel(entrada.entDados("Informe seu numero celular: "));
}

catch(InvalidCelException nfe){
System.out.println("\n CELULAR INVALIDO!!!");
}

bdCad.add(usuario);

System.out.println("\nTAMANHO DO ARRAY: "+bdCad.size());

String resp = entrada.entDados("\n DESEJA REALIZAR MAIS UM CADASTRO? <s/n>");
if(resp.equalsIgnoreCase(“n”)){
vai = false;
}

}

for(int i = 0; i < bdCad.size(); i++){
//======================= CADASTRO INICIAL =============================
System.out.println("\n\n>>>>>> CADASTRO DE USUARIO <<<<<<");
System.out.println("Seu nome e: " +bdCad.get(i).getNome());
System.out.println("A sua idade e: " +bdCad.get(i).getIdadeUsu());
System.out.println("CELULAR: "+bdCad.get(i).getCel());

}

usuario.setCel deve resolver.


Uma coisa que achei estranho nessa implementação foi Usuario extends Banda. Usuário É uma Banda?

1 curtida

Funcionou, obrigadoo!
Então, até onde eu compreendo, Usuario está herdando de Banda, eu to usando de Banda, o setNome e tem outro tbm. Vou enviar a classe Banda.

public abstract class Banda {

private String nome = “”;
private int qtdIntegrantes = 0;
private String nomeIntegrantes = “”;
private String mscInfluente = “”;
private String cel = “”;

private Informacoes info = new Informacoes();
private Discografia disc = new Discografia();
private Turnes turn = new Turnes();

//==========================================================
public String getCel(){
return cel;
}

public void setCel(String cel) throws InvalidCelException{
if (cel.length() <= 10 && cel.length() > 0) {
this.cel = cel;
} else {
throw new InvalidCelException();
}
}

//==========================================================
//POLIMORFISMO

public void impInicio(){
System.out.println("\n\nINICIO - FALE SOBRE SUA BANDA DE ROCK!\n");

}

//==========================================================

public String getNome(){
return nome;
}
public void setNome(String nome){
this.nome = nome;
}

public int getQtdIntegrantes(){
return qtdIntegrantes;
}
public void setQtdIntegrantes(int qtdIntegrantes){
this.qtdIntegrantes = qtdIntegrantes;
}

public String getNomeIntegrantes(){
return nomeIntegrantes;
}
public void setNomeIntegrantes(String nomeIntegrantes){
this.nomeIntegrantes = nomeIntegrantes;
}

public String getMscInfluente(){
return mscInfluente;
}
public void setMscInfluente(String mscInfluente){
this.mscInfluente = mscInfluente;
}

//==========================================================

public Informacoes getInfo(){
return info;
}

public void setInfo(Informacoes info){
this.info = info;
}

public Discografia getDisc(){
return disc;
}

public void setDisc(Discografia disc){
this.disc = disc;
}

public Turnes getTurn(){
return turn;
}

public final void setTurn(Turnes turn){
this.turn = turn;
}

}

Olha só, acho que vc previu um problema aqui. Como eu uso o set Nome da classe Banda para dizer o nome da Banda e tbm uso ele de herança para o nome do usuário, quando eu vou pegar os nomes, o nome que prevalece é o nome que eu coloco em Banda, assim o nome do usuario e o da banda ficam iguais. Como será que da pra resolver isso? Por que me parece que vou ter problema com todas as heranças dessa forma.

import java.util.List;
import java.util.ArrayList;

public class ShowTime extends Banda {

private static ImplementsBanda cad;
private static List bdCad = new ArrayList();

public static void main(String arg[]){

Banda b1 = new ImplementsBanda();
Entrada entrada = new Entrada();
Integrante integran = new Integrante();

boolean vai = true;
int op = 0;

while(vai){

cad = new ImplementsBanda();

//===================== CADASTRO SIMPLES, ANTES DA BANDA ================
System.out.println("\n\nCADASTRO SIMPLES");
Usuario usuario = new Usuario();
usuario.setNome(entrada.entDados("\nDiga o seu nome: "));
usuario.setIdadeUsu(Integer.parseInt(entrada.entDados("Diga a sua idade: ")));

try{

usuario.setCel(entrada.entDados("Informe seu numero celular: "));
}

catch(InvalidCelException nfe){
System.out.println("\n CELULAR INVALIDO!!!");
}

//================================================================
//=====================CADASTRO DA BANDA=======================
usuario.impInicio();
usuario.setNome(entrada.entDados("Diga o nome da banda: "));
usuario.setQtdIntegrantes(Integer.parseInt(entrada.entDados("Diga a quantidade de integrantes da banda: ")));
usuario.setNomeIntegrantes(entrada.entDados("Diga o nome de cada integrante: "));
usuario.setMscInfluente(entrada.entDados("Diga qual a musica mais influente ou famosa da banda: "));

//===========================================================================
usuario.getInfo().setEstilo(entrada.entDados("\n\n\nDiga o estilo musical da banda: "));
usuario.getInfo().setLocalFundacao(entrada.entDados("Diga o local de fundacao da banda: "));
usuario.getInfo().setAnoFundacao(Integer.parseInt(entrada.entDados("Diga o ano de fundacao da banda: ")));

bdCad.add(usuario);

System.out.println("\nTAMANHO DO ARRAY: "+bdCad.size());

String resp = entrada.entDados("\nDESEJA REALIZAR MAIS UM CADASTRO? <s/n>");
if(resp.equalsIgnoreCase(“n”)){
vai = false;
}

}

for(int i = 0; i < bdCad.size(); i++){
//==================== CADASTRO INICIAL ==============================
System.out.println("\n\n\n\n>>>>>> CADASTRO DE USUARIO <<<<<<");
System.out.println("Seu nome e: " +bdCad.get(i).getNome());
System.out.println("A sua idade e: " +bdCad.get(i).getIdadeUsu());
System.out.println("CELULAR: "+bdCad.get(i).getCel());

//==================== SOBRE A BANDA ================================
System.out.println("\n\n>>>>>> INFORMACOES SOBRE A BANDA <<<<<<");
System.out.println("Nome da Banda: " +bdCad.get(i).getNome());
System.out.println("Quantidade integrantes: " +bdCad.get(i).getQtdIntegrantes());
System.out.println("Nome dos integrantes: " +bdCad.get(i).getNomeIntegrantes());
System.out.println("Musica mais influente ou famosa: " +bdCad.get(i).getMscInfluente());

Você tem que pensar assim:
Usuário É uma Banda? Não, então não use extends.
Usuário TEM uma Banda? Faz mais sentido. Nesse caso poderia colocar um atributo Banda na classe Usuario.

1 curtida

Entao, fazendo dessa maneira, eu recebo MUITOS erros, talvez eu esteja fazendo de forma errada, como voce atribuiria? Talvez, seja por que minha classe banda é abstrata.

class Usuario {
    private Banda banda;

   //setBanda
   //getBanda
}
1 curtida

Fiz ele aqui, porem continuo com os mesmos erros e são vários. Será que é por que Banda é abstrata?

public class Usuario {

private Banda banda;

private int idadeUsu = 0;

//==========================================================

public Banda getBanda(){
return banda;
}

public int getIdadeUsu(){
return idadeUsu;
}

//==========================================================

public final void setBanda(Banda banda){
this.banda = banda;
}

public final void setIdadeUsu(int idadeUsu){
this.idadeUsu = idadeUsu;
}

}

Mostra os erros.

1 curtida

São ao todo 37 erros, mas todos eles é desse mesmo tipo, por isso mandei metade, se não ia ter muito texto.

TstShowTime.java:36: error: cannot find symbol
usuario.setNome(entrada.entDados("\nDiga o seu nome: "));
^
symbol: method setNome(String)
location: variable usuario of type Usuario
TstShowTime.java:41: error: cannot find symbol
usuario.setCel(entrada.entDados("Informe seu numero celular: "));
^
symbol: method setCel(String)
location: variable usuario of type Usuario
TstShowTime.java:51: error: cannot find symbol
usuario.impInicio();
^
symbol: method impInicio()
location: variable usuario of type Usuario
TstShowTime.java:52: error: cannot find symbol
usuario.setNome(entrada.entDados("Diga o nome da banda: "));
^
symbol: method setNome(String)
location: variable usuario of type Usuario
TstShowTime.java:53: error: cannot find symbol
usuario.setQtdIntegrantes(Integer.parseInt(entrada.entDados("Diga a quantidade de integrantes da banda: ")));
^
symbol: method setQtdIntegrantes(int)
location: variable usuario of type Usuario
TstShowTime.java:54: error: cannot find symbol
usuario.setNomeIntegrantes(entrada.entDados("Diga o nome de cada integrante: "));
^
symbol: method setNomeIntegrantes(String)
location: variable usuario of type Usuario
TstShowTime.java:55: error: cannot find symbol
usuario.setMscInfluente(entrada.entDados("Diga qual a musica mais influente ou famosa da banda: “));
^
symbol: method setMscInfluente(String)
location: variable usuario of type Usuario
TstShowTime.java:58: error: cannot find symbol
usuario.getInfo().setEstilo(entrada.entDados(”\n\n\nDiga o estilo musical da banda: "));
^
symbol: method getInfo()
location: variable usuario of type Usuario
TstShowTime.java:59: error: cannot find symbol
usuario.getInfo().setLocalFundacao(entrada.entDados("Diga o local de fundacao da banda: "));
^
symbol: method getInfo()
location: variable usuario of type Usuario
TstShowTime.java:60: error: cannot find symbol
usuario.getInfo().setAnoFundacao(Integer.parseInt(entrada.entDados("Diga o ano de fundacao da banda: ")));
^
.
.
.
.
.
37 errors

São todos erros parecidos, então vou explicar um:

TstShowTime.java:36: error: cannot find symbol /// Não foi possível encontrar símbolo
usuario.setNome(entrada.entDados("\nDiga o seu nome: ")); //Apontando para o símbolo não encontrado
        ^
symbol: method setNome(String) //Símbolo que não foi encontrado: método setNome
location: variable usuario of type Usuario //Onde? na classe Usuario

Na variável “usuario” do tipo (classe) “Usuario”, você tentou chamar o método setNome (esse é o símbolo não encontrado) e ele não existe na classe Usuario.

1 curtida