PDA

View Full Version : [JAVA] Come fare due return?


marczxc
03-02-2010, 14:54
Ciao a tutti. Io ho questo semplice programma che in un array di caratteri trova la sequenza più lunga

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

char[] array ={'a','b','c','c','f','f','z','z','z','z','b','b','b','b','b'};


System.out.println("Array: ");
for(int i=0;i<array.length;i++)
System.out.print(array[i]+" ");
System.out.println();
cercaChar(array);
}



public static void cercaChar(char[] a){
int n=a.length;
int cmax=1,cont=1;
char c=a[0],com=a[0];
for(int i=1;i<n;i++){
if(a[i]==com && i!=a.length-1) cont++;
else if(a[i]==com && i==a.length-1) { //nel caso fossi arrivato alla fine dell'array, così posso memorizzare l'ultima sequenza
cont++;
if(cont>cmax){
cmax=cont;
c=com;
}
}
else{
if(cont>cmax){
cmax=cont;
c=com;
}
com=a[i];
cont=1;
} // fine else
} //fine for
System.out.println("Lettera della sequenza piu' lunga: "+c);
System.out.println("Lunghezza sequenza: "+cmax);
}


}

del metodo cercaChar devo fare un'altra versione che mi restituisce sia il carattere della sequenza più lunga sia quanto è lunga la sequenza. come posso fare?

ndakota
03-02-2010, 15:30
Non andrò a sindacare sul fatto che stai usando il Java come un linguaggio procedurale ma quella funzione non puoi semplicemente farla diventare due funzioni? E' bella lunga :stordita:

clockover
03-02-2010, 15:39
Devi fare due metodi, oppure un solo metodo con due variabili globali e modificarle facendo side effect

vladix
03-02-2010, 15:48
non puoi ritornare 2 rislutati a meno che nn li wrappi in un hashmap, o un vettore ... ma la cosa piu "elegante" che mi viene in mente e creare un classe con 2 campi carrattere e lunghezzaSequenza e fai solo il get di questi metodi , e l'array lo passi come parametro al costruttore , in modo che chi crea un istanza di quella classe deve x forza inizializzarla correttamente




public class ProvaSequenza {

public static void main(String ... c){

char [] xd = null;
Sequenza seq = Sequenza.cercaChar(xd);

seq.getCarrattere();
seq.getLunghezzaSequenza();
}
}




public class Sequenza{

private String carrattere;
private Integer lunghezzaSequenza ;

private Sequenza (){}

public static Sequenza cercaChar(char [] a){

Sequenza seq = new Sequenza();
// lancia navicella
// setta carattere della sequenza più lunga sia quanto è lunga la sequenza nelle rispettive variabili

return seq;
}

public String getCarrattere{
return carrattere;
}

public Integer getLunghezzaSequenza(){
return lunghezzaSequenza;
}
}