PDA

View Full Version : [Java] Creare array di oggetti non primitivi...come?


D4rkAng3l
08-01-2009, 18:17
ciao,
allora stò cercando di capire come poter creare array di oggetti non primitivi in Java...non ho problemi a creare un array di int ma se per esempio mi definissi un mio tipo di dato chiamato Coppie che semplicemente mi rappresenta oggetti formati da una coppia di interi (più qualche banale operazione su di essi...lo sò no è carino...dovrei fare una classe che rappresenta il tipo di dato e basta ed un'altra che mi rappresenta una lista di metodi utili ma questo è solo un esempio...)

Ora la mia classe Coppie è:


/** Classe che rappresenta Coppie di interi */

public class Coppie{

private int val1;
private int val2;
private int a;

/** Costruttore: crea un nuovo oggetto Coppie e lo inizializza con i valori dei parametri a e b ricevuti
@param a valore 1
@param b valore 2
*/

public Coppie(int a, int b){
val1 = a;
val2 = b;
}

public int getVal1(){
return val1;
}

public int getVal2(){
return val2;
}


public void scambia(){
a = val1;
val1 = val2;
val2 = a;
}

public void somma(Coppie c){
val1 += c.val1;
val2 += c.val2;
}
}


Quello che fà credo sia abbastanza intuitivo...

Poi creo un'altra classe che contiene il main dove vorrei poter creare un array di oggetti coppie (quindi credo che in ogni elemento dell'array ci debba essere il riferimento ad un oggetto di tipo Coppie presente nello heap)...io ho provato così ma non funziona:


public class TestArrayCoppie{
public static void main(String[] args){

int a,b;

Coppie coppia1 = new Coppie(1,2);
Coppie coppia2 = new Coppie(7,8);
Coppie coppia3 = new Coppie(1,1);

Coppie [] = new Coppie[3]; // Creo un array di coppie


a = coppia1.getVal1();
b = coppia1.getVal2();

System.out.print("Val1: " + a + " Val2: " + b);

}
}


che c'è di sbagliato? Come posso creare un array di oggetti Coppie?

Grazie
Andrea

Ken1986
08-01-2009, 18:48
Coppie [] coppie = new Coppie[3]

D4rkAng3l
08-01-2009, 19:38
Coppie [] coppie = new Coppie[3]

Doh mi ero dimenticato di inserire il nome dell'array...ed adesso se voglio inizializzare l'array con i 3 oggetti di tipo Coppie che ho precedentemente creato?come fare?

Tnx
Andrea

Don[ITA]
08-01-2009, 20:01
coppie[0] = coppia1;
coppie[1] = coppia2;
coppie[2] = coppia3;

Ken1986
08-01-2009, 21:37
Oppure direttamente così:


coppia[0] = new Coppie(1,2);
ecc..

Don[ITA]
08-01-2009, 22:15
O anche così:

Coppie[] coppie = {new Coppie(1,2), new Coppie(7,8), new Coppie(1,1)};

:D :D

D4rkAng3l
08-01-2009, 23:06
Grazie...ora devo vedermi bene questo argomento...vi ringrazio per la disponibilità :-)

narutouzumaki
15-03-2011, 15:58
Dunque vi chiedo,anzi imploro il vostro aiuto :)
Ho scritto una classe ContoCor
class ContoCor{
private String nome;
private int conto;
private double ammontare;

//COSTRUTTORE
public ContoCor(String n,int c,double a){
this.nome = n;
this.conto = c;
this.ammontare = a;
}

//METODO
public String toString(){
String s = "Descrizione conto " + "\n";
s += "Nome intestatario conto " + this.nome + "\n";
s += "Numero conto " + this.conto + "\n";
s += "Ammontare conto " + this.ammontare + "\n";
return s;
}
//METODO
public void contiCritici(ContoCor[] v , double x){
for(int i=0;i<v.length;i++)
if(v[i].ammontare < x)
System.out.println(v[i]);
}
}


Ora devo scrivere la classe prova/test che mi chiede di inserire un array di inserire all’utente una sequenza a sua
scelta di conti correnti ed un double x, e che visualizza tutte le descrizioni complete dei
conti correnti inseriti che hanno un ammontare corrente inferiore ad x.
Io per ora ho scritto questa parte della classe prova/test ma non riesco a creare l'array di contoCor e quindi far girare il programma

class ProvaContoCor{
public static void main(String [] args){
InputWindow in = new InputWindow();
OutputWindow out = new OutputWindow("Conto Corrente");

int dim = in.readInt("Dimensione sequenza");
String [] nome = new String [dim];
int [] conto = new int [dim];
double [] ammontare = new double[dim];
double x = in.readDouble("Inserisci un valore");
ContoCor [] array = new ContoCor[dim];

for(int i=0;i<dim;i++){
nome[i] = in.readString("Inserisci il nome " + i);
conto [i] =in.readInt("Inserisci numero conto " + i);
ammontare [i] = in.readDouble("Inserisci ammontare del conto " + i);

ContoCor v = new ContoCor(nome[i],conto[i],ammontare[i]);
}


VI PREGO AIUTATEMI,è UNA COSA FACILE LO SO MA NON RIESCO STO IMPAZZENDO :muro:

}
}

ndakota
15-03-2011, 16:15
class ProvaContoCor{
public static void main(String [] args){
InputWindow in = new InputWindow();
OutputWindow out = new OutputWindow("Conto Corrente");

int dim = in.readInt("Dimensione sequenza");
String [] nome = new String [dim];
int [] conto = new int [dim];
double [] ammontare = new double[dim];
double x = in.readDouble("Inserisci un valore");
ContoCor [] array = new ContoCor[dim];

for(int i=0;i<dim;i++){
nome[i] = in.readString("Inserisci il nome " + i);
conto [i] =in.readInt("Inserisci numero conto " + i);
ammontare [i] = in.readDouble("Inserisci ammontare del conto " + i);

ContoCor v = new ContoCor(nome[i],conto[i],ammontare[i]);
array[i] = v;
}

}
}

narutouzumaki
15-03-2011, 17:14
Cavolo Grazie veramente NDAKOTA sei stato velocissimo ed efficientissimo,un ultima cosa poi veramente non ti rompo più.
se voglio visualizzare tutti i contoCor che hanno un ammontare minore di "x" come faccio?
lo so sono un rompi*
:D

ndakota
15-03-2011, 20:39
Puoi usare il tuo metodo contiCritici passando l'array e un certo valore x però quel metodo non è il massimo. Per come l'hai fatto avrebbe dovuto essere static, ti dice niente?

In ogni caso prova così


for(int i=0;i<dim;i++) {
nome[i] = in.readString("Inserisci il nome " + i);
conto [i] =in.readInt("Inserisci numero conto " + i);
ammontare [i] = in.readDouble("Inserisci ammontare del conto " + i);

ContoCor v = new ContoCor(nome[i],conto[i],ammontare[i]);
array[i] = v;
}

ContoCor.contiCritici(array, x);



Dove x è una variabile valorizzata come preferisci. Ciao :)

narutouzumaki
16-03-2011, 09:28
Ndakota hai ragionissimo,anche io avrei usato il metodo static,mah lo scheletro della classe è definito dal mio professore,questi sono delle prove di esame alla programmazione.
Anche io per pura semplicità avrei usato un metodo static in modo tale da rendere le cose più semplice.
Proprio per questo ho chiesto il vostro aiuto per la visualizzazione,perchè purtroppo mettendo

ContoCor.contiCritici(array, x) non funziona :(

Ad ogni modo grazie per l'array di oggetti di tipo non primitivo,sei un cavolo di geniaccio.
:D

ndakota
16-03-2011, 20:49
Se mi dici cosa non funziona vediamo di sistemare ;)

narutouzumaki
17-03-2011, 13:18
Grazie grazie :D

narutouzumaki
17-03-2011, 13:24
Dunque dovrei visualizzare i conti critici,solo che con ContoCor.ContiCritici(array,x) non mi visualizza nulla purtroppo.
:D