Illegal start of expression

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");
}
1 curtida

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.

1 curtida

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

1 curtida

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.

1 curtida