Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

valores inciais

Conta conta = new Conta(); conta.setNumero(1089); System.out.println(conta.getNumero()); conta.setAgencia(559); System.out.println(conta.getAgencia());

duvida : quando coloca o zero no primeiro numero no setAgencia ou Set numero ocorre um erro,

6 respostas

Bom dia Caio.

Coloque por favor todo o código da classe Conta e do seu método Main, além da mensagem de erro que está ocorrendo.

class Conta {

private double saldo;
private int agencia;
private int numero;
private Cliente titular;


public void deposita(double valor) {

    this.saldo += valor;
}

public boolean sacar(double valor) {
    if (this.saldo >= valor) {
        this.saldo += -valor;
        return true;
    } else {
        return false;
    }
}

boolean transfere(double valor, Conta destino) {
    if (this.saldo >= valor) {
        this.saldo -= valor;
        destino.deposita(valor);
        return true;
    }
    return false;
}

public double getSaldo() {
    return this.saldo;
}

public int getNumero() {
    return this.numero;
}

public void setNumero(int numero) {
    this.numero = numero;
}

public int getAgencia() {
    return this.agencia;
}

public void setTitular(Cliente titular) {
    this.titular = titular;
}


public Cliente getTitular() {
    return titular;
}



public void setAgencia(int agencia) {
    this.agencia = agencia;
}

O erro que está ocorrendo quando tenta passar por exemplo

conta.setNumero(01089);

é: The literal 01089 of type int is out of range.

Esse erro é porque no Java e em outras linguagens, quando você coloca um zero antes do número, quer dizer que está trabalhando com o sistema octal e não decimal. Os números octais vão de 0 a 7, e tentou inserir o 01089, que possui os números 8 e 9. O setNumero abaixo funciona pois se usa números de 0 a 7, e como coloquei o 0 antes quer dizer que quero trabalhar com octais:

conta.setNumero(01076); 

Completando:

Como está trabalhando com um inteiro para número e agência, utilize os números decimais que vão de 0 a 9. Um inteiro utilizando decimal tem o range de -2147483648 a 2147483647.

System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);

entendi a logica do problema mas caso não seja possivel e o ultimo caracter precise ser 8 ou 9 como ficaria ?

solução!

Com o número e agência sendo inteiros isso não é possível, os números inteiros começados com 0 serão tratados como octais. O número 0123 por exemplo, equivale ao 83 em decimal.

Se nesses exercícios deseja um número e agência que comece com zero, o ideal é colocar a variável como String.

private String numero;
private String agencia;
conta.setNumero("0107989899");  //Agora funciona normalmente.

Aqui tem uma ótima explicação sobre os literais do Java, te darão uma maior clareza sobre esse assunto: https://www.devmedia.com.br/entendendo-as-literais-em-java/26526

"Octal, em Java, utiliza números entre 0 e 7. Para representar os números em octais, deve colocar um “0” na frente de qualquer inteiro."