Aplicando exceções erro

Olá, estou aplicando exceções no meu código, mas to com um errinho aparentemente básico, mas não consigo encontrar o problema, mesmo comparando com outro código.

ERRO:
ShowTime.java:23: error: cannot find symbol
System.out.println("\nCPF: "+b1.getCpf());
^
symbol: method getCpf()
location: variable b1 of type Banda
1 error

CÓDIGO QUE APONTA O ERRO:
public class ShowTime extends Banda {

public static void main(String arg[]){

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

b1.impInicio();
//============================================================================
try{

b1.setCpf(Integer.parseInt(entrada.entDados("\nInforme seu CPF: “)));
System.out.println(”\nCPF: "+b1.getCpf());
}

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

Como está o código da sua classe Banda?

public abstract class Banda {

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

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

//==========================================================
public void setCpf(int cpf) throws InvalidCpfException{

if(cpf >= 0){

   if(cpf <= 11){
   this.cpf = cpf;
   }

   else{
   throw new InvalidCpfException();

}

}
}
}

Sua classe banda não tem um método getCpf, e você está tentando chamar na classe ShowTime, por isso acontece o erro!

1 curtida

Arruma isso aí, um CPF não é um número.
CPFs podem começar com zero.
Valores numéricos não possuem zero à esquerda.

2 curtidas

Então, realizei as mudanças e agora foi. Também mudei de CPF para numero celular.
Porém, agora to com um erro aparentemente de logica aqui, que seria algo que o meu If deveria fazer, mas aparentemente não está.
Eu digito um numero qualquer, dentro das regras que estabeleci, e ele está caindo na opção invalida, invés de cair na opção valida, que exibiria meu numero. Vou mandar os codigos da classe BANDA e ShowTime abaixo, junto com oque me aparece no console.

Console:
Informe seu numero celular:
91667788

CELULAR INVALIDO!!!

Classe Banda:
public abstract class Banda {

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

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

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

public void setCel(int cel) throws InvalidCelException{

if(cel >= 0){

   if(cel <= 10){
   this.cel = cel;
   }

   else{
   throw new InvalidCelException();

}

}
}

Classe ShowTime:
public class ShowTime extends Banda {

public static void main(String arg[]){

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

//=============================================================================
try{

b1.setCel(Integer.parseInt(entrada.entDados("\nInforme seu numero celular: “)));
System.out.println(”\nCELULAR: "+b1.getCel());
}

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

Poste o código da classe Entrada.

1 curtida

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Entrada {

public String entDados(String rotulo){

	System.out.println(rotulo);

	InputStreamReader teclado = new InputStreamReader(System.in);
	BufferedReader buff = new BufferedReader(teclado);
	
	String metal ="";
		
	try{
		metal = buff.readLine();
	}
	catch(IOException ioe){
		System.out.println("\nErro");
	}

	return metal;
}

}

Você digitou “91667788”.
Analisando o código:

//cel é igual ao número 91667788
if(cel >= 0){ //91667788 é maior que 0, passa aqui
    if(cel <= 10){ //91667788 é maior que 10, não passa
        this.cel = cel;
    } else { 
        throw new InvalidCelException();
    }
}

O problema é que você quer checar o tamanho (length) do número, mas está apenas comparando o valor.

Uma forma de resolver isso é processar o celular como String:

void setCelular(String cel) {
    if (cel.length() <= 10 && cel.length() > 0) {
        this.cel = cel;
    } else {
         //jogar erro
    }
    //note que isso não checa se a String é composta por números, seria bom fazer um parseInt para isso
}
1 curtida