Erro de compilação

10 respostas
java
W

Quando executo o codigo, recebo as mensagens de que atributos do tipo inteiro sao grandes demais, mas na vdd nao sao. Eu tenho a classe Conta e a classe Data, sendo que esse objeto Data esta referenciado em um atributo da minha classe Conta, o erro se da na inicializacao dos atributos quando instancio o objeto Conta, segue o codigo:

package br.com.dev.banco;

public class Conta {

private String nome;
private int id_conta;
private double saldo;
private Data dt_abertura;

public Conta(String nome, int id_conta, double saldo, Data d){
    this.nome = nome;
    this.id_conta = id_conta;
    this.saldo = saldo;
    this.dt_abertura.setDia(d.getDia());
    this.dt_abertura.setMes(d.getMes());
    this.dt_abertura.setAno(d.getAno());
}
public String getNome(){
    return this.nome;
}

public int getId_conta(){
    return this.id_conta;
}

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

public void saca(double valor){
    if(valor>this.saldo){
        System.out.println("Saldo insuficiente para saque");
    }else {
        this.saldo -= valor;
        System.out.println("Saque efetuado");
    }
}

public void deposita(double valor){
    this.saldo+=valor;
    System.out.println("Deposito efetuado");
}

public void transferePara(Conta c, double valor){
    if(valor>this.saldo){
        System.out.println("Saldo insuficiente para transferencia");
    }else{
        this.saldo-=valor;
        c.saldo+=valor;
    }
}


public void exibirInfo(Conta c){
    System.out.println(c.getNome());
    System.out.println("\n"+c.getId_conta());
    System.out.println("\n"+c.getSaldo());
    System.out.println("\n"+c.dt_abertura.exibirData());

}

}

package br.com.dev.banco;

public class Data {

private int dia;
private int mes;
private int ano;

public Data(int dia, int mes, int ano){
    this.dia = dia;
    this.mes = mes;
    this.ano = ano;
}

public int getDia(){
    return this.dia;
}

public int getMes(){
    return this.mes;
}

public int getAno() {
    return this.ano;
}

public void setDia(int dia){
    this.dia = dia;
}

public void setMes(int mes){
    this.mes = mes;
}

public void setAno(int ano){
    this.ano = ano;
}

public void exibirData(Data d){
    System.out.println("Data de abertura da conta: "+d.getDia()+"/"+d.getMes()+"/"+d.getAno());
}

}

package br.com.dev.banco;

public class CaixaEletronico {

public static void main(String[] args) {



Data d = new Data(08,07,2018);
Conta conta1 = new Conta("Wendel",123,5100,d);
Data d2 = new Data(09,07,2018);
Conta conta2 = new Conta("Claudio",456,2340,d2);
conta1.transferePara(conta2,250);
conta1.exibirInfo();
conta1.saca(100);

}

}

Mensagem de erro: Error:(9, 23) java: integer number too large: 08
Error:(11, 24) java: integer number too large: 09

Seria erro nos atributos dos dois objetos Data

10 Respostas

S

Se você digita um literal int começando com zero, o Java considera que é um número em base octal.
Assim como a base binária só utiliza os digitos 1 e 0, a base octal só utiliza os dígitos de 0 à 7, logo 08 e 09 não são números octais válidos.
Remove o zero da frente do literal que vai funcionar.

W

Retirei os 0s e agora o codigo executa, mas to tendo um problema com o apontamento do atributo ‘dt_abertura’, do tipo Data, quando chamo o metodo pra imprimir a ‘data de abertura da conta’ esta sendo exibido o endereco de memoria onde o obejto ‘dt_abertura’ foi alocado.

package br.com.dev.banco;

public class Data {

private int dia;
private int mes;
private int ano;

public Data(int dia, int mes, int ano){
    this.dia = dia;
    this.mes = mes;
    this.ano = ano;
}

public int getDia(){
    return this.dia;
}

public int getMes(){
    return this.mes;
}

public int getAno() {
    return this.ano;
}

public void setDia(int dia){
    this.dia = dia;
}

public void setMes(int mes){
    this.mes = mes;
}

public void setAno(int ano){
    this.ano = ano;
}

public int exibirData(Data d){
    return d.getDia()+d.getMes()+d.getAno();
}

}

package br.com.dev.banco;

public class Conta {

private String nome;
private int id_conta;
private double saldo;
private Data dt_abertura;

public Conta(String nome, int id_conta, double saldo, Data d){
    this.nome = nome;
    this.id_conta = id_conta;
    this.saldo = saldo;
    dt_abertura = d;
    this.dt_abertura.setDia(d.getDia());
    this.dt_abertura.setMes(d.getMes());
    this.dt_abertura.setAno(d.getAno());
}

n sei se o apontamento no meu construtor Conta esta certo, e essas chamadas dos metodos ‘Sets’ pra receber os valores dos atributos do objeto Data estao certos…

S

O que está sendo impresso é o retorno do método toString() que, quando não é sobrescrito, retorna:

<nome_completo_da_classe>@<identity_hashcode>

Se você quer que o toString() dos objetos do tipo Data retornem algo diferente, precisa sobrescrever o método.

W

na vdd, eu acredito que nem seja o metodo toString() que ele esteja retornando, pq por exemplo eu criei 2 objetos contas, e chamo o metodo que exibe as info das contas, e na informacao das datas de abertura das contas esta sendo impresso respectivamente: 2033 e 2034

S

Você atribuiu o parâmetro d ao atributo dt_abertura, logo tanto o parâmetro quanto o atributo apontam para o mesmo objeto Data na memória.
Ou seja, é desnecessário chamar o setDia, setMes e setAno.

Posta o código onde você faz isso.

W
package br.com.dev.banco;

public class CaixaEletronico {

public static void main(String[] args) {



Data d = new Data(8,7,2018);
Conta conta1 = new Conta("Wendel",123,5100,d);
Data d2 = new Data(9,7,2018);
Conta conta2 = new Conta("Claudio",456,2340,d2);
conta1.transferePara(conta2,250);
conta1.exibirInfo(conta1,d);
conta1.saca(100);
conta2.exibirInfo(conta2,d2);

}

}

S

Pôxa amiguinho, ao menos posta o código completo e atualizado das classes.
A classe Conta que você postou nem tem o método exibirInfo.

W

perdao, amigo

package br.com.dev.banco;

public class Conta {

private String nome;
private int id_conta;
private double saldo;
private Data dt_abertura;

public Conta(String nome, int id_conta, double saldo, Data d){
    this.nome = nome;
    this.id_conta = id_conta;
    this.saldo = saldo;
    dt_abertura = d;
    this.dt_abertura.setDia(d.getDia());
    this.dt_abertura.setMes(d.getMes());
    this.dt_abertura.setAno(d.getAno());
}

public String getNome(){
    return this.nome;
}

public int getId_conta(){
    return this.id_conta;
}

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

public void saca(double valor){
    if(valor>this.saldo){
        System.out.println("Saldo insuficiente para saque");
    }else {
        this.saldo -= valor;
        System.out.println("Saque efetuado");
    }
}

public void deposita(double valor){
    this.saldo+=valor;
    System.out.println("Deposito efetuado");
}

public void transferePara(Conta c, double valor){
    if(valor>this.saldo){
        System.out.println("Saldo insuficiente para transferencia");
    }else{
        this.saldo-=valor;
        c.saldo+=valor;
    }
}

public void exibirInfo(Conta c, Data d){
    System.out.println(c.getNome());
    System.out.println("\n"+c.getId_conta());
    System.out.println("\n"+c.getSaldo());
    System.out.println(c.dt_abertura.exibirData(d));

}

}

package br.com.dev.banco;

public class Data {

private int dia;
private int mes;
private int ano;

public Data(int dia, int mes, int ano){
    this.dia = dia;
    this.mes = mes;
    this.ano = ano;
}

public int getDia(){
    return this.dia;
}

public int getMes(){
    return this.mes;
}

public int getAno() {
    return this.ano;
}

public void setDia(int dia){
    this.dia = dia;
}

public void setMes(int mes){
    this.mes = mes;
}

public void setAno(int ano){
    this.ano = ano;
}

public int exibirData(Data d){
    return d.getDia()+d.getMes()+d.getAno();
}

}

package br.com.dev.banco;

public class CaixaEletronico {

public static void main(String[] args) {



Data d = new Data(8,7,2018);
Conta conta1 = new Conta("Wendel",123,5100,d);
Data d2 = new Data(9,7,2018);
Conta conta2 = new Conta("Claudio",456,2340,d2);
conta1.transferePara(conta2,250);
conta1.exibirInfo(conta1,d);
conta1.saca(100);
conta2.exibirInfo(conta2,d2);

}

}

No caso deveria ser exibido as info da conta1 e a data de abertura como ‘872018’ e da conta2 como ‘972018’ e esta exibindo 2033 e 2034

S

Você implementou o método exibirData para retornar um int com a soma do dia com o mês e o ano.

8 + 7 + 2018 = 2033
9 + 7 + 2018 = 2034
W

kkkk putz nem tinha pensado nisso. Valeu pela ajuda, cara.

Criado 9 de julho de 2018
Ultima resposta 9 de jul. de 2018
Respostas 10
Participantes 2