PDA

View Full Version : [Java] problema


gigippa
19-06-2007, 10:47
Ciao. Devo implementare i metodi trasformaInTripla della classe che metto qui sotto

import java.util.Scanner;
import static java.lang.System.*;

public class CoppiaTripla{

static Scanner input = new Scanner(System.in);

public static void main(String[] args) {

Coppia [] array = creaArrayCoppia();
stampaArrayCoppia(array);
//
trasformaInTripla(array);
stampaArrayTripla(trasformaInTripla(array));
}


/** Metodo che crea e restituisce un array di Coppie. Gli interi che compongono
le singole Coppie sono richiesti all'utente.
*/
public static Coppia [] creaArrayCoppia() {
out.println("Di che lunghezza vuoi l'array?");
while(!input.hasNextInt()) {
input.next();
out.print("Immetti un intero: ");
}
int n = input.nextInt();
Coppia [] array = new Coppia[n];
for(int i = 0; i < n; i++){
array[i] = new Coppia();
out.println("Inserisci il primo elemento della coppia numero " + i);
array[i].setI(input.nextInt());
out.println("Inserisci il secondo elemento della coppia numero " + i);
array[i].setJ(input.nextInt());
}

return array;
}

/** Metodo che stampa un array di Coppie. */
public static void stampaArrayCoppia(Coppia [] a){
int n = a.length;
for (int i = 0; i < n; i++)
out.println(a[i]);
}

/** Metodo da completare che dato un array di Coppie costruisce e restituisce un array di Triple.*/
public static Tripla [] trasformaInTripla(Coppia [] a){
int dimensione=a.length;
Tripla arr [] = new Tripla[dimensione];

for(int i=0; i<dimensione; i++){ //i<a.length
arr[i].setI(a[i].getI()); //= a[i].getI();
arr[i].setJ(a[i].getJ());

if(arr[i].getI()<arr[i].getJ()){
arr[i].setK(arr[i].getI());
}
else arr[i].setK(arr[i].getJ());
}
return arr;
}


/** Metodo che stampa un array di Triple. */
public static void stampaArrayTripla(Tripla [] a){
int n = a.length;
for (int i = 0; i < n; i++)
out.println(a[i]);
}

}
classe che utilizza le classi che qui riporto
class Tripla {

private int i;
private int j;;
private int k;


// NON INTRODURRE NESSUN COSTRUTTORE!
// Si usa il costuttore di default.


/** Restituisce il valore del campo i*/
public int getI() {
return i;
}

/** Restituisce il valore del campo j*/
public int getJ() {
return j;
}

/** Restituisce il valore del campo k*/
public int getK() {
return k;
}


/** Modifica il campo i*/
public void setI(int i) {
this.i = i;
}

/** Modifica il campo j*/
public void setJ(int j) {
this.j = j;
}

/** Modifica il campo k*/
public void setK(int k) {
this.k = k;
}

/** Restituisce una stringa che contiene tutti i valori dei campi dell'oggetto*/
public String toString(){
return "i: " + i + " j: " + j + " k: " + k;
}


}

class Coppia {

private int i;
private int j;



// NON INTRODURRE NESSUN COSTRUTTORE!
// Si usa il costuttore di default.


/** Restituisce il valore del campo i*/
public int getI() {
return i;
}

/** Restituisce il valore del campo j*/
public int getJ() {
return j;
}


/**Modifica il campo i*/
public void setI(int i) {
this.i = i;
}

/** Modifica il campo j*/
public void setJ(int j) {
this.j = j;
}


/** Restituisce una stringa che contiene tutti i valori dei campi dell'oggetto*/
public String toString(){
return "i: " + i + " j: " + j;
}

}
Non riesco a capire come mai non funzioni. Qualcuno mi aiuta? Grazie

andbin
19-06-2007, 11:04
public static Tripla [] trasformaInTripla(Coppia [] a){
int dimensione=a.length;
Tripla arr [] = new Tripla[dimensione];

Il fatto di istanziare un array di N elementi di tipo Tripla non vuol dire che hai già istanziato N oggetti di tipo Tripla!!!

In arr hai inizialmente tutti i reference a null. Pertanto devi anche istanziare gli oggetti Tripla e assegnare i reference agli elementi dell'array.

gigippa
19-06-2007, 11:07
Il fatto di istanziare un array di N elementi di tipo Tripla non vuol dire che hai già istanziato N oggetti di tipo Tripla!!!

In arr hai inizialmente tutti i reference a null. Pertanto devi anche istanziare gli oggetti Tripla e assegnare i reference agli elementi dell'array.

Cioe? Mi puoi scrivere come fare?

gigippa
19-06-2007, 11:14
Grazie. Ho risolto cosi

public static Tripla [] trasformaInTripla(Coppia [] a){
int dimensione=a.length;

Tripla arr [] = new Tripla[dimensione];


for(int i=0; i<dimensione; i++){
arr[i]=new Tripla();
arr[i].setI(a[i].getI()); //= a[i].getI();
arr[i].setJ(a[i].getJ());

if(arr[i].getI()<arr[i].getJ()){
arr[i].setK(arr[i].getI());
}
else arr[i].setK(arr[i].getJ());
}
return arr;
}