Permutazioni e stringhe

m3c4
ciao a tutti!

dunque, ho un problema sulle permutazioni, ma soprattutto sulla stampa di esse..
vi posto il codice:
//generare tutte le permutazioni di una stringa con una procedura ad
//esaurimento

public class permuta {

	public static void perm (String [] v)
	{  
		if (v.length<=1) System.out.println ("stringa lunga 1"+v);
		else{
			for(int i=v.length-1;i>=v.length;i--){
				 String  temp=v[i];v[i]=v[i-1];v[i-1]=temp;
				 System.out.println("1chiamata "+v[i]);
				 perm(v);
				 System.out.println();
				 temp=v[i];v[i]=v[i-1];v[i-1]=temp;
				 System.out.println("2chiamata "+v[i]);
			}	  			
		    }
	}
	
	public static void main (String [] args)
	{
		String[] s= {"c","i","a","o"};
		perm(s);	
	}
}


credo funzioni, non mi da errori, l'unico problema è che mi da un output vuoto.

ancor piu strano è che se modifico il main cosi


public static void main (String [] args)
	{
		String[] s= {"c","i","a","o"};
		System.out.println(perm(s));	
	}

mi da errore sul println (?!?!?!?!?!?!) ritornandomi

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method println(boolean) in the type PrintStream is not applicable for the arguments (void)

che posso fare?
grazie a tutti....!

Risposte
apatriarca
perm non restituisce alcun valore e quindi non ha senso visualizzare questo valore di ritorno. Per poter scrivere qualcosa di quel tipo, la tua funzione deve restituire una stringa.

xsl
"apatriarca":
Per poter scrivere qualcosa di quel tipo, la tua funzione deve restituire una stringa.

Non necessariamente.

apatriarca
"xsl":
[quote="apatriarca"]Per poter scrivere qualcosa di quel tipo, la tua funzione deve restituire una stringa.

Non necessariamente.[/quote]
Certo, però non sono molti i tipi che ha senso usare in questo contesto. Direi String o String[]. Quello che però volevo dire era che si deve restituire qualcosa che può diventare una stringa, qualcosa di stampabile insomma. void non lo è.

xsl
"apatriarca":
qualcosa di stampabile insomma, void non lo è.

Su questo non ci piove.

"apatriarca":

Direi String o String[].

Se restituisci un array poi sei costretto a doverlo iterare per poter stampare gli elementi... :wink: mi riferivo ad altro.

m3c4
allora se faccio una classe di tipo String [] mi da sempre errore nel return.. non riesco a capire che vuole..
fra l'altro netbeans ti propone varie soluzioni, ho provato ma risolvendo uno creo un errore nell'altro.. da qui la mia scelta di usare un metodo void..
vuoi perche non funzioni, vuoi perche non so lavorare su stringhe..

una buona soluzione quale potrebbe essere?

apatriarca
Se restituisci un array poi sei costretto a doverlo iterare per poter stampare gli elementi... :wink: mi riferivo ad altro.

Mi riferivo alla funzione in generale in questo caso e non alla possibilità di poter scrivere:
System.out.println(perm(s));

Era in effetti a partire da questa considerazione che ero arrivato a dire che il valore di ritorno doveva essere String. Per esclusione era l'unico tipo di ritorno che secondo me aveva senso usare per scrivere quella riga di codice. Ma se si restituisce un array si può usare:
System.out.println(Arrays.toString(perm(s)));

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.