Creazione di oggetti in modo iterativo

di il
2 risposte

Creazione di oggetti in modo iterativo

Ciao a tutti,
ho una domanda sulla creazione di oggetti in modo iterativo.

di seguito vi riporto un pezzo di codice del programmino su cui sto lavorando, che consiste nel creare un mazzo di carte con i semi francesi (il classico mazzo da poker texano)

premetto che ho creato una classe Carta che prende in input due stringhe (numero , seme), oppure, senza parametri, ne genera una casuale.

Nella classe MazzoDiCarte invece, l’idea era quella di riempire l’array di oggetti “carte”, creando ogni volta una Carta(numero, seme) nuova. Questo però non è possibile poichè gli oggetti vengono istanziati nello heap solo a tempo di esecuzione:
this.carte[i] = new Carta(tipoNumero[k], tipoSeme[j])
questa istruzione, quindi, anziché creare i 52 oggetti corrispondenti alle altrettante carte classiche, crea un solo oggetto, riempendo l’array “carte" con un’unica carta (ovvero la carta re di picche, che, seguendo l'odine dei for, corrisponde all'ultimo oggetto creato).

inserisco qui in basso l’idea che vorrei implementare, chiaramente non funzionante.

la mia domanda è: non esiste un metodo iterativo che mi permette di creare oggetti (in questo caso carte) diversi?
Per riempire l’array carte sono costretto a scrivere 52 volte “Carta carta = new Carta(numero, seme)"?

public class MazzoDiCarte 
{
	private Carta[] carte = new Carta[52];
	private String[] tipoSeme = new String[] {"cuori", "quadri", "fiori", "picche"};
	private String[] tipoNumero = new String[] {"asso", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove", "dieci", "fante", "regina", "re"};
	
	
	public MazzoDiCarte()
	{
		//ciclo per riempire l'array "carte"
		for (int i = 0; i < carte.length; i++)
		{
			for (int j = 0; j < tipoSeme.length; j++)
			{
				for (int k = 0; k < tipoNumero.length; k++)
					this.carte[i] = new Carta(tipoNumero[k], tipoSeme[j]);
			}
		}
	}
}

2 Risposte

  • Re: Creazione di oggetti in modo iterativo

    Jeremy.M ha scritto:


    inserisco qui in basso l’idea che vorrei implementare, chiaramente non funzionante.
    Non "funziona" semplicemente perché così non ha senso. L'innestamento dei 3 loop costruisce 52*4*13 oggetti Carta. Che ovviamente non ha senso.

    Soluzione: usa una variabile i ma NON in un for. Iniziala a 0 fuori, prima dei due for. Poi fai i due loop innestati per seme/numero. Questo crea 52 oggetti Carta e ciascuno deve andare in uno "slot" dell'array. Cioè, per ciascun oggetto Carta lo assegni a carte e incrementi i. Tutto qui.
  • Re: Creazione di oggetti in modo iterativo

    @andbin grazie per la correzione! Ho modificato il codice ed ora funziona.
Devi accedere o registrarti per scrivere nel forum
2 risposte