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

Retorno incorreto das variaveis

Olá, poderiam me ajudar a entender o porque o print do valor da variavel vem diferente, segue código:

Conta.java

class Conta {
    double saldo;
    int numeroAgencia;
    int numeroConta;
    String titular;
}

CriarConta.java

public class CriarConta
{
    public static void main(String[] args) {
        Conta primeiraConta = new Conta();
        primeiraConta.saldo = 200;
        System.out.println("O Saldo na conta é: " + primeiraConta.saldo);

        primeiraConta.numeroAgencia = 0001;
        System.out.println("O numero da agencia é: " + primeiraConta.numeroAgencia);

        primeiraConta.numeroConta = 00000011;
        System.out.println("O numero da conta é: " + primeiraConta.numeroConta);

        primeiraConta.titular = "Rafa SHOW";
        System.out.println("O nome do titular é: " + primeiraConta.titular);


        Conta segundaConta = new Conta();
        segundaConta.saldo = 300;
        System.out.println("O saldo na conta é: " + segundaConta.saldo);

        segundaConta.numeroAgencia = 0002;
        System.out.println("O numero da agencia é: " + segundaConta.numeroAgencia);

        segundaConta.numeroConta = 00000021;
        System.out.println("O numero da conta é: " + segundaConta.numeroConta);

        segundaConta.titular = "Rosa SHOW";
        System.out.println("O nome do titular é: " + segundaConta.titular);

    }
}

Saída da execução

O numero da agencia é: 1

O numero da conta é: 9

O nome do titular é: Rafa SHOW

O saldo na conta é: 300.0

O numero da agencia é: 2

O numero da conta é: 17

O nome do titular é: Rosa SHOW

Como podem ver, o 'numeroConta' vem com um valor diferente, não entendi da onde veio esse número, acredito que seja devido aos '0's que coloquei a esquerda, mas não faço idéia(heheh!!).

2 respostas

Os números com zero a esquerda que você declarou estão em base octal e não decimal. Em Java, qualquer número que comece com zero é base octal

solução!

É basicamente o que o Otávio falou, a base octal é muito utilizado no mundo da computação, como uma alternativa mais compacta do sistema binário. A sua conversão de octal para decimal (que foi o que o java fez automaticamente no seu exemplo) é semelhante à adotada pela base binaria, onde o seu valor em decimal é igual a soma dos números que compõe cada casa do número octal multiplicado por 8 elevado a casa do número, iniciando com 0 e começando da direita para a esquerda. Para deixar mais claro:

class Main {

    public static void main(String[] args) {

        String octal = "00000011";

        int decimal = (int) ((0 * Math.pow(8, 7)) 
                + (0 * Math.pow(8, 6))
                + (0 * Math.pow(8, 5))
                + (0 * Math.pow(8, 4))
                + (0 * Math.pow(8, 3))
                + (0 * Math.pow(8, 2))
                + (1 * Math.pow(8, 1))
                + (1 * Math.pow(8, 0)));

        /**
          * Levando em conta que todo numero multiplicado por 0 é 0, podemos desconsiderar os 0 a esquerda e ficamos com:
          * decimal = (int) ((1 * Math.pow(8, 1)) + (1 * Math.pow(8, 0))); 
          * decimal = (int) ((1 * 8) + (1 * 1));
          * decimal = 8 + 1  
          * decimal = 9
          */

        System.out.println(decimal); // 9
        System.out.println(octalToDecimal("00000021")); // 17
    }

    /**
     * Método que recebe uma String em formato octal e transforma em int.
     * 
     * @param octal
     * @return 
     */
    public static int octalToDecimal(String octal) {

        double decimal = 0;
        for (int i = 0 ; i < octal.length(); i++) {
            decimal += Character.getNumericValue(octal.charAt(i)) * Math.pow(8, octal.length()-1-i);
        }

        return (int) decimal;
    }

}