PDA

View Full Version : [JAVA] Inserire un contatore nel costruttore per identificare ogni oggetto creato?!?!


luxorl
07-01-2005, 11:08
Allora ragazzi,
prima di tutto volevo ringraziarvi a tutti, perchè durante questo mio periodo di avvicinamento alla programmazione Java, mi sto appoggiando abbastanza su questo forum.

Andiamo al problema:
Ho costruito una classe ContoBancario che crea oggetti ti tipo ContoBancario, poi ho costruito un'altra classe che ereditaria di ContoBancario: ContoEsteso (per la creazione di un ContoBancario che avesse un fido, cioè poteva andare in rosso, mentre questo su un normale contobancario non è possibile).. ho messo nel costruttore un contatore, e volevo identificare ogni ContoBancario (Esteso e no) con un numero, basato su un contatore... mi spiego meglio:
se è il primo contobancario creato il numero deve essere 1001, il secondo 1002.. 1003.. ecc ecc.

Avevo pensato di mettere un contatore nel costruttore, e porre la variabile numero=1000+contatore...

ma andiamo al codice:

Classe ContoBancario fino al costruttore..

package esamepoo.banca;

public class ContoBancario{
private int numconto;
protected double soldi;
private int cnt=0;
public ContoBancario(double soldi){
cnt=++;
this.soldi=soldi;
this.numconto=1000+cnt;
}


Classe ContoEsteso fino al costruttore...

package esamepoo.banca;

public class ContoEsteso extends ContoBancario{
protected double fido;
public ContoEsteso(double soldi){
super(soldi);
fido=1000;
}


Poi ho costruito un piccolo main per la gestione di più ContiBancari, che basato su un array clientela[] aprisse più conti (quanti ne vuole l'utente) o estesi o no! (sempre a scelta dell'utente).. ecco il codice:


import poo.inout.*;
import esamepoo.banca.*;

public class GestioneBanca{
public static void main(String args[]){
double soldi;
final String SI="s";
final String NO="n";
String risp;
int n=Console.readInt("Quanti Conti desideri inserire? ");
ContoBancario clientela[]=new ContoBancario[n];
for(int i=0; i<clientela.length; i++){
System.out.println("Per il conto numero "+i+" vuoi un fido?");
risp=Console.readString("S/N: ");
risp=risp.substring(0,1);
risp=risp.toLowerCase();
if (risp.equals(SI)){
soldi=Console.readDouble("Quanti soldi nel conto (con fido) numero "+i+"?");
clientela[i]=new ContoEsteso(soldi);
}else{
soldi=Console.readDouble("Quanti soldi nel conto (senza fido) numero "+i+"?");
clientela[i]=new ContoBancario(soldi);
}
}
for(int i=0; i<clientela.length; i++)
System.out.println("Il conto numero "+i+" risulta: "+clientela[i]);
}
}


il mio problema sta nel fatto.. che i conti escono tutti col numero 1001... come se il contatore non aumentasse..
cosa sbaglio? come devo fare per far si che ad ContoBancario creato il contatore aumenti di uno? e quindi il numero di riferimento del conto sia =1000+contatore?

Grazie :)

beppegrillo
07-01-2005, 11:41
Non ho tempo di leggere tutto il codice, ma devi semplicemente dichiarare la tua variabile contatore come static, se non fai cosi' perdi il valore e viene istanziata ogni volta una nuova.

luxorl
07-01-2005, 11:50
Originariamente inviato da beppegrillo
Non ho tempo di leggere tutto il codice, ma devi semplicemente dichiarare la tua variabile contatore come static, se non fai cosi' perdi il valore e viene istanziata ogni volta una nuova.

Grazie del suggerimento!!
ho dovuto rendere static il contatore però!!
perchè rendendo static il numero la situazione non cambiava, perchè nel costruttore avevo
cnt++;
numero=1000+cnt;

rendendo static entrambi avevo in uscite (per esempio per 3 oggetti creati)

numero del primo= 1003
numero del secondo= 1003
numero del terzo= 1003

rendendo solo statico il contatore ottengo la cosa giusta!!

numero del primo= 1001
numero del secondo= 1002
numero del terzo= 1003

Grazie!! :)

luxorl
07-01-2005, 11:54
Comunque,
perchè con static non perdo il valore e senza si??
Me le dai due righe di spiegazione please!!

beppegrillo
07-01-2005, 11:57
Originariamente inviato da luxorl
Comunque,
perchè con static non perdo il valore e senza si??
Me le dai due righe di spiegazione please!!
Certo, con static è come se dichiarassi una variabile globale, quindi è unica per l'intero corso del programma, mentre se dichiari una variabile automatica, il suo valore viene perso tra una chiamata ed un'altra, perchè avviene una nuova istanziazzione di quest'ultima ad ogni chiamata, se richiami n volte il tuo costruttore o metodo avrai n variabili diverse.
Spero di esser stato chiaro :)

luxorl
07-01-2005, 11:59
Chiarissimo e Gentilissimo :mano:
Grazie

atidem
07-01-2005, 12:32
Razionale, ContoBancario, ContoEsteso...
Ho già visto queste classi in qualche testo di programmazione, ma dove? :wtf: In quale università studi?

luxorl
07-01-2005, 12:35
Unical.. università della calabria cosenza :)

atidem
07-01-2005, 12:37
Prof. Nigro. :D

luxorl
07-01-2005, 15:00
YES :D ..un bravo professore! ..ma tu come lo conosci?