olá, eu sou nova no mundo da programação e estou com duvidas no meu código. Esta aparecendo a mensagem de erro no meu método.
public class Conta{
public int numConta;
protected String tipoConta;
private String dono;
private float saldo;
private boolean status;
Conta() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public void estadoAtual(){
System.out.println("----- * Menu * > Conta Bancaria-----");
System.out.println("Conta: " + this.getNumConta());
System.out.println("Tipo: " + this.getTipoConta());
System.out.println("Dono: " + this.getDono());
System.out.println("Saldo atual: " + this.getSaldo());
System.out.println("Status: " + this.getStatus());
}
// metodo construtor abaixo
// construtor do TipoConta
public Conta(int numConta, String tipoConta, String dono, float saldo, boolean status) {
this.numConta = numConta;
this.tipoConta = tipoConta;
this.dono = dono;
this.saldo = saldo;
this.status = status;
}
public Conta(String tipoConta){
this.saldo=0;
this.status=false;
}
public void abrirConta(String t){
this.setTipoConta(t);
this.setStatus(true);
if ("CC".equals(t)) {
this.setSaldo(50);
}else if ("CP".equals(t)){
this.saldo = 150;
System.out.println("Conta aberta com sucesso");
/**
*
*/
public void fecharConta(){ // que porra é isso
if (this.getSaldo() > 0) {
System.out.println("Conta nao pode ser fechada pois tem débito");
}else if(this.getSaldo() < 0){
System.out.println("Conta com dinheiro");
}else{
this.setStatus(false);
System.out.println("Conta fechada com sucesso");
}
}
No método abrirConta
vc não fechou aquele else if
e também não fechou o corpo do método, por isso está dando erro.
Acredito que o correto seria assim:
public void abrirConta(String t) {
this.setTipoConta(t);
this.setStatus(true);
if ("CC".equals(t)) {
this.setSaldo(50);
} else if ("CP".equals(t)) {
this.saldo = 150;
}
System.out.println("Conta aberta com sucesso");
}
Obg amg. Sou novata nisso ai ta faltando atenção kk
Ta dando outro problema e eu acredito que seja no metodo construtor mas eu nao faço ideia do que seja. Talvez parametros, enfim
mas ele ta assim
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
Conta p1 = new Conta();
p1.setNumConta(1313);
p1.setDono("Akira");
p1.abrirConta("CC");
Conta p2 = new Conta();
p2.setNumConta(1403);
p2.setDono("narah");
p2.abrirConta("CP");
p1.depositar(100);
p2.depositar(200);
p1.estadoAtual();
p2.estadoAtual();
}
}
O erro em questão foi o " Conta p1 = new Conta () ; "
Olha o que o seu construtor sem parâmetros faz:
Conta() {
throw new UnsupportedOperationException("Not supported yet.");
}
Então nunca vai dar pra chamar new Conta()
.
Não sei se faz sentido existir esse construtor. Ele cria uma conta com saldo e status, mas sem número, tipo nem dono. Faz sentido uma conta ser criada sem essas informações? (claro que a resposta é “depende”, pois pode ser que seja um requisito poder criar uma conta “incompleta”, mas enfim, cada trecho de código que vc coloca tem que ser justificado - se não faz sentido, não deveria existir).
Só que o mais estranho é que ele recebe o tipoConta
, mas não faz nada com essa informação, já que essa variável sequer é usada.
Idealmente, ao criar um objeto, o construtor já deveria retorná-lo em um estado válido. Por isso que esse trecho de código não me parece ideal:
Em vez de fazer isso, por que não ter um construtor que já seta todas essas informações? Sugestão, ter apenas um construtor:
public class Conta {
private int numero;
private String tipo;
private String dono;
private float saldo;
private boolean aberta;
public Conta(int numero, String tipo, String dono, boolean abrir) {
this.numero = numero;
this.tipo = tipo;
this.dono = dono;
if (abrir) {
this.abrirConta(tipo);
} else {
this.aberta = false;
this.saldo = 0;
}
}
public void abrirConta(String tipo) {
this.aberta = true;
if ("CC".equals(tipo)) {
this.saldo = 50;
} else if ("CP".equals(tipo)) {
this.saldo = 150;
} else {
this.saldo = 0;
}
}
}
Também mudei alguns nomes. Por exemplo, em vez de numConta
, mudei para numero
(afinal, se este é um campo da classe Conta
, então claro que é o número da conta - ter “conta” no nome do campo é redundante, o mesmo vale para o tipo). E não entendi porque o número é public
, o tipo é protected
enquanto resto é private
(deixei todos os campos privados mesmo). E status
é um nome bem genérico, ainda mais para um campo booleano (status true é o que? E false?) Por isso mudei o nome para aberta
, pois é isso que este campo indica: se a conta está aberta ou não.
E como é o tipo que define o saldo, eu não passo o valor do saldo no construtor. Aliás, ter um método setSaldo
já me parece incorreto, pois uma vez criada a conta, o saldo só poderia ser alterado via depósitos, saques e transferências. Na verdade eu removeria todos os setters que não fazem sentido (talvez o tipo e o dono faça sentido - já o número, não sei, pois se mudar o número, ainda é a mesma conta? depende dos requisitos, mas enfim, como regra geral, não crie getters e setters pra tudo sem pensar, crie somente o que fizer sentido).
Enfim, para usar o construtor acima, seria:
Conta p1 = new Conta(1313, "CC", "Akira", true);
E pronto, o construtor já retorna uma conta válida, com todas as informações preenchidas (nada de primeiro criar uma conta “vazia” e depois setar os campos um a um). E não é só pela “economia de linhas”, mas sim para manter as regras dentro da própria conta (assim você não precisa lembrar que uma conta precisa setar o campo X, depois chamar o método Y, etc - o construtor já se encarrega desta lógica, e quem usa a classe só precisa chamar o construtor com os parâmetros corretos).
Sei que nada disso tem a ver diretamente com o problema inicial, mas já são dicas pra vc ir pensando no futuro.
Obrigada pelas dicas, eu meio que fiz assim por que na minha cabeça com o algoritmo isso fazia mais sentido. O exercício meio que pede esses requisitos por isso algumas coisas tem que ser feita assim. Obrigada pelas dicas, anotei direitinhos e com toda certeza ira ajudar uma iniciante como eu kkk
eu ainda não entendo como isso funciona. Eu não digitei foi meio que a IDE pediu que fizesse isso, ai achei que estivesse correto. Saberia informar para que essa informação funciona ?
Era isso mesmo, no apagando e fazendo de novo acabei apagando um { sem notar kkk obrigada
Muitas IDE’s criam o “esqueleto” dos métodos/construtores automaticamente, mas costuma ser só um mínimo de código para que o programa compile. Porém, nem sempre será um código útil ou que funcione, e é vc quem tem que mudá-lo para que faça o que precisa.