Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Java] Passaggio a un costruttore parametri differenti

    Ciao a tutti, ho un problema su un passaggio a un costruttore a causa dei 3 parametri di date, riporto il codice

    codice:
    import java.util.Date;
    
    public class BankAccount{
      private String nome;
      private String cognome;
      private Date dataDiNascita;
      private int numeroConto;
    
      private int conta=100000;
    
      public BankAccount(String nome, String cognome, Date data){;
         setNuovoCliente(nome, cognome, data);
      }
    
      public void setNuovoCliente (String nome, String cognome, Date data){
         this.nome=nome;
         this.cognome=cognome;
         this.dataDiNascita=data;
      }
    
     
      public void setNumeroConto(int numero){
         this.conta+=1;
         this.numeroConto=this.conta;    
      }
    }
    codice:
    public class TestBankAccount{
      public static void main(String[] args){
        BankAccount tizio = new BankAccount("Paolino", "Gromm", 1970,02,21);
      }
    }
    Il problema è che io gli passo 5 parametri e il costruttore ne vuole 3, ma data ha a sua volta 3 parametri interi, come faccio a passarglieli correttamente?

    Ah, ho un altro dubbio, è possibile fare un contronto tra TUTTE le istanze esistenti di una classe? Cioè sarebbe possibile, e se si come, implementare la setNumeroConto in modo tale che prenda un numero, lo confronti con i numeroConto esistenti, se è uguale, numero++ e continua il confronto finchè non trova un numero libero? Perchè la mia setNumeroConto cosi' come l'ho fatta non mi piace.

    Grazie mille a chi mi aiuta

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Passaggio a un costruttore parametri differenti

    Originariamente inviato da mishima
    codice:
        BankAccount tizio = new BankAccount("Paolino", "Gromm", 1970,02,21);
    Il problema è che io gli passo 5 parametri e il costruttore ne vuole 3, ma data ha a sua volta 3 parametri interi, come faccio a passarglieli correttamente?
    Ovviamente come hai appena fatto .... è sbagliato in tutti i sensi! E comunque il Date non lo si crea con g/m/a. Se vai a vedere il javadoc di Date troverai che ha anche i costruttori per ricevere questi dati separati ma sono deprecati, cioè da non usare più!

    Quindi hai almeno 2 scelte:

    a) Cambi il costruttore in modo che riceva 3 int, nel costruttore istanzi un GregorianCalendar (temporaneo) da cui poi prendi il Date da assegnare al tuo campo.
    b) Passi al costruttore un Date che ti sei già calcolato/istanziato tu. Magari, per semplificare, puoi anche creare un metodo statico di "utilità" che riceve i 3 int e ritorna un Date (stessa logica, prima un GregorianCalendar poi prendi il suo Date).

    Originariamente inviato da mishima
    Ah, ho un altro dubbio, è possibile fare un contronto tra TUTTE le istanze esistenti di una classe? Cioè sarebbe possibile, e se si come, implementare la setNumeroConto in modo tale che prenda un numero, lo confronti con i numeroConto esistenti, se è uguale, numero++ e continua il confronto finchè non trova un numero libero? Perchè la mia setNumeroConto cosi' come l'ho fatta non mi piace.
    Il campo 'conta' comunque l'hai fatto "di istanza". E vuol dire che ogni istanza ha il "suo" conta. Quindi così come è servirebbe a poco.
    Se il campo 'conta' fosse "di classe" (static) beh, avrebbe già più senso.

    E per quanto riguarda la tua idea di tenere dei riferimenti a tutte le istanze .... beh, sì tecnicamente sarebbe fattibile. Ma ci sarebbero un po' di questioni da discutere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao andbin, grazie per l'aiuto. Ho corretto il primo errore, il secondo no, non ho capito cosa devo fare

    codice:
    import java.util.*;
    
    
    public class BankAccount{
      private String nome;
      private String cognome;
      private GregorianCalendar dataDiNascita;
      private int numeroConto;
    
      private int conta=100000;
    
      public BankAccount(String nome, String cognome, int anno, int mese, int giorno){
        GregorianCalendar greg = new GregorianCalendar(anno, mese, giorno);
        setNuovoCliente(nome, cognome, greg);
      }
    
      public void setNuovoCliente (String nome, String cognome, GregorianCalendar greg){
         this.nome=nome;
         this.cognome=cognome;
         this.dataDiNascita=greg;
      }
    
     
      public void setNumeroConto(){
         this.conta+=1;
         this.numeroConto=this.conta;    
      }
    
      public String toString(){
        return "Nome: " + nome + "\nCognome: " + cognome + "\nData " + dataDiNascita.get(Calendar.DAY_OF_MONTH) + "-" + dataDiNascita.get(Calendar.MONTH) + "-" + dataDiNascita.get(Calendar.YEAR) + "\nConto " + numeroConto +"\n";
      }
    }
    codice:
    public class TestBankAccount{
      public static void main(String[] args){
        BankAccount tizio = new BankAccount("Paolino", "Gromm", 70,02,21);
        BankAccount caio = new BankAccount("Caio", "SenzaCognome", 80,05,24);
        System.out.println(tizio);
        System.out.println(caio);
      }
    }
    Il risultato del numero conto è 0 sia per tizio che per caio, effettivamente hai ragione, conta sarebbe d'istanza e non "globale" come avrei voluto fare io (poi da 0 e non 10000, non capisco perchè). Come posso fare per avere quel numero sempre diverso per ogni istanza che vado a creare? Se possibile, crescente di 1.

    Se il campo 'conta' fosse "di classe" (static) beh, avrebbe già più senso.
    Non ho ben capito cosa intendi, dovrei creare una classe statica a parte che conterrebbe il campo conta e farlo ereditare alla mia classe BankAccount?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mishima
    Non ho ben capito cosa intendi, dovrei creare una classe statica a parte che conterrebbe il campo conta e farlo ereditare alla mia classe BankAccount?
    codice:
    private static int conta=100000;
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Originariamente inviato da andbin
    codice:
    private static int conta=100000;
    l'avevo già provato ma non andava, ma ho capito perchè. Nel costruttore ho dimenticato di scrivere
    setNumeroConto();
    per questo numeroConto veniva 0 perchè gli interi di default vanno a 0.
    senza quello non mi dava l'errore che dice di mettere a static conta.

    Senti un'ultima cortesia, secondo te è una buona scelta questa della variabile statica per fare tutti numeri diversi o tu avresti fatto diversamente?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mishima
    l'avevo già provato ma non andava, ma ho capito perchè. Nel costruttore ho dimenticato di scrivere
    setNumeroConto();
    per questo numeroConto veniva 0 perchè gli interi di default vanno a 0.
    senza quello non mi dava l'errore che dice di mettere a static conta.
    Senti, non so cosa hai fatto ma questo è corretto:
    codice:
    public class BankAccount {
        .....
    
        private int numeroConto;
        private static int conta=100000;
    
        public BankAccount(.....) {
            .....
    
            numeroConto = conta++;
        }
    Originariamente inviato da mishima
    secondo te è una buona scelta questa della variabile statica per fare tutti numeri diversi o tu avresti fatto diversamente?
    È il modo più semplice e immediato per farlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok ho capito tutto, grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.