Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

"int" não aceita certos números

Olá, estava fazendo uma atividade parecida com o que foi desenvolvido no vídeo, a respeito de definir parâmetros para serem colocados no contrutor, como exemplo "public Cont( int numero, int agencia){ }", porém tentei colocar o o valor de int agencia como 016 no "main", e o que recebi como resposta pelo "sysout" foi 014, e quando coloquei 018 como resposta ela não foi aceita. Qual o motivo disso acontecer? Os resultados só passaram a ser corretos após eu retirar o "0" como número inicial. Isso seria por causa do "int" ? Deveria utilizar "String" nessas situações?


public class Conta {
    private double saldo;  
    private int numero;
    private int agencia;
    private Cliente titular;

    public Conta(int numero, int agencia) {
        this.numero = numero;
        this.agencia = agencia;

    }

    public void deposita(double valor) {
        this.saldo += valor;

    }

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

    public boolean transfere(double valor, Conta destino) {

        if(this.saldo>=valor) {
            this.saldo -= valor;
            destino.deposita(valor);
            return true;
        }
        return false;
    }

    public void mostraSaldo() {
        System.out.println(this.saldo);
    }

     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 setAgencia(int agencia) {
        this.agencia = agencia;

    }    

    public Cliente getTitular() {
        return this.titular;
    }

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

public class TesteEncapsulamento { public static void main(String[] args) {

    Conta conta = new Conta(3355,186);
    Cliente manu = new Cliente();
    conta.setTitular(manu);
    manu.setNome("Manuella");
    manu.setCpf("155.555.555-89");
    manu.setProfissao("Professora");

    conta.deposita(50);
    conta.getSaldo();
    conta.mostraSaldo();

    conta.saque(30);
    conta.getSaldo();
    conta.mostraSaldo();

    System.out.println(manu.getNome());
    System.out.println(manu.getCpf());
    System.out.println(manu.getProfissao());

    System.out.println(conta.getTitular().getNome());
    System.out.println(conta.getTitular().getCpf());
    System.out.println(conta.getTitular().getProfissao());

    System.out.println(conta.getAgencia());

}

}

1 resposta
solução!

Oie Bernardo, tudo bem com você?

Vamos lá

O Java define como "inteiro" expressões baseadas em numero decimal (base 10), hexadecimal (base 16), octal (base 8) ou binário (base 2), isso você pode verificar aqui JLS 3.10.1 (Está em inglês).

Portando ao iniciar colocando o número "0" o Java entende que você está colocando um número octal. Então colocando o número "016" em um variavel "int", ele interpreta da seguinte forma:

Cálculo

Nessa situação o jeito mais fácil é você apenas retirar esse "0" e colocar apenas o valor que você deseja. Agora caso você tenha necessidade que o print seja "016" você irá precisar fazer uma formatação na hora de printar a variável "agencia" com o seguinte código:

System.out.printf("%03d", conta.getAgencia());

Implementando essa linha acima no seu código ficaria da seguinte forma:

public class Conta {
    private double saldo;  
    private int numero;
    private int agencia;
    private Cliente titular;

    public Conta(int numero, int agencia) {
        this.numero = numero;
        this.agencia = agencia;

    }

    public void deposita(double valor) {
        this.saldo += valor;

    }

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

    public boolean transfere(double valor, Conta destino) {

        if(this.saldo>=valor) {
            this.saldo -= valor;
            destino.deposita(valor);
            return true;
        }
        return false;
    }

    public void mostraSaldo() {
        System.out.println(this.saldo);
    }

     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 setAgencia(int agencia) {
        this.agencia = agencia;

    }    

    public Cliente getTitular() {
        return this.titular;
    }

    public void setTitular(Cliente titular) {
        this.titular = titular;
    }    
}
public class TesteEncapsulamento { public static void main(String[] args) {
    Conta conta = new Conta(3355,16);
// O valor definido precisa ser inteiro como "agencia" precisa ser inteiro

    Cliente manu = new Cliente();
    conta.setTitular(manu);
    manu.setNome("Manuella");
    manu.setCpf("155.555.555-89");
    manu.setProfissao("Professora");

    conta.deposita(50);
    conta.getSaldo();
    conta.mostraSaldo();

    conta.saque(30);
    conta.getSaldo();
    conta.mostraSaldo();

    System.out.println(manu.getNome());
    System.out.println(manu.getCpf());
    System.out.println(manu.getProfissao());

    System.out.println(conta.getTitular().getNome());
    System.out.println(conta.getTitular().getCpf());
    System.out.println(conta.getTitular().getProfissao());

    //esse "%03d" define 3 casas decimais, "000"
    System.out.printf("%03d", conta.getAgencia());
    // Nessa caso precisa ser usado o "printf" ao invés do "println", pois o "printf" permite formatação

    // Por fim, o valor printado será 016

}

Você também poderia ter definido a variável "agencia" como String, mas credito que do jeito mostrado acima resolve melhor esse problema.

Espero que eu tenha ajudado, qualquer dúvida ou problema fico a disposição :)

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software