Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Alex_47 on 08-01-2009, 15:51:19



Title: Ordinamento caratteri di una stringa
Post by: Alex_47 on 08-01-2009, 15:51:19
Ciao ragazzi volevo un chiarimento per un esercizio che avevo fatto io...

HO fatto un programma che ordina i caratteri di una stringa ma stranamente il programma non risulta e mi da due errori , ecco qua il codice..

Code:
import java.io.*;
import java.lang.*;
import java.math.*;


class ciaomondo
{
public static void main(String[] args)
{
String A="destrodiobunanza";

char T;
char C;

int i;
int y;

for(i=0;i<A.length()-1;i++)
{

for(y=i+1;y<A.length()-1;y++)
{
if(A.charAt(i)>A.charAt(y))
{

T=A.charAt(i);
A.charAt(i)=A.charAt(y);
A.charAt(y)=T;

    }
}
    }
   
    System.out.println(A);
   
   
}
}


mi da due errori in

A.charAt(i)=A.charAt(y);
A.charAt(y)=T;

dandomi un unexpected type in (i).
secondo voi qual'è il problema?


Title: Re:Ordinamento caratteri di una stringa
Post by: MisteroLupo on 08-01-2009, 16:14:45
Code:
A.charAt(i)=A.charAt(y);
A.charAt(y)=T;
Questa è un'operazione di assegnamento ma sia A.charAt(i) come A.charAt(y) sono dei valori, non sono delle variabili, per questo ti da quell'errore.
Sono dei metodi che ti restituiscono il carattere in quella posizione, non ti permettono di cambiarlo!


Title: Re:Ordinamento caratteri di una stringa
Post by: Alex_47 on 08-01-2009, 16:18:12
Allora come faccio a cambiare il carattere di una stringa?


Title: Re:Ordinamento caratteri di una stringa
Post by: Vivynz on 08-01-2009, 16:24:18
Le stringhe non possono essere modificate a meno che non usi la classe StringBuffer..l'unica cosa che puoi fare è creare una nuova stringa con i caratteri ordinati, ma non ordinare direttamente i caratteri della prima..


Title: Re:Ordinamento caratteri di una stringa
Post by: MisteroLupo on 08-01-2009, 16:42:16
Quoto Vivynz, ti conviene creare una nuova stringa di supporto!


Title: Re:Ordinamento caratteri di una stringa
Post by: Fr3d3R!K on 08-01-2009, 16:54:35
oppure usi il metodo toCharArray() (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#toCharArray()) in modo da trasformare la stringa in array di char. Ordini l'array di char (tramite un algoritmo qualunque), e poi ritrasformi quest'ultimo in stringa tramite la funzione
valueOf(char[] data) (http://tinyurl.com/8lom5x).
EDIT: il link alla documentazione per il metodo valueOf non l'ho messo perchè il forum riconosce le parentesi dell'array  come di fine tag [url] per cui non riporta il link completo.


Title: Re:Ordinamento caratteri di una stringa
Post by: Vivynz on 08-01-2009, 17:15:27
si infatti ci avevo pensato...tipo così?
Code:
public class Es55
{
public static String ordinaChar(String s)
{
char[] stringa=s.toCharArray();
ordina(stringa);
String output=String.valueOf(stringa);
return output;
}
public static void ordina(char[] c)
{
int min=0;
for(int i=0;i<c.length-1;i++)
{
min=i;
for(int j=i+1;j<c.length;j++)
if(c[j]<c[min])
min=j;
scambia(c,min,i);
}
}
public static void scambia(char[] c,int a,int b)
{
char temp=c[a];
c[a]=c[b];
c[b]=temp;
}
public static void main (String[] args)
{
String s="decba";
String ss=ordinaChar(s);
System.out.println(ss);
}
}
Non capisco però se scrivo:
Code:
String output=String.valueOf(stringa);
funziona,mentre se scrivo:
Code:
String output=valueOf(stringa);
non funziona..
perchè???non mi era mai capitato con altri metodi statici..


Title: Re:Ordinamento caratteri di una stringa
Post by: k1r4 on 09-01-2009, 22:42:27
per ordinare i caratteri all'interno di una stringa propongo di procedere nel seguente modo:

1- trasformare la stringa in un array di char (toCharArray())
2- ordinare l'array di char come un qualsiasi array di interi utilizzando un qualsiasi algoritmo di ordinamento
3- trasformare l'array di char in una stringa


Title: Re:Ordinamento caratteri di una stringa
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 10-01-2009, 00:16:06
[...] il link alla documentazione per il metodo valueOf non l'ho messo perchè il forum riconosce le parentesi dell'array  come di fine tag
Puoi usare il [url=http://tinyurl.com/]servizio tinyurl] per cui non riporta il link completo.
 (http://per cui non riporta il link completo.
[/quote)
Puoi usare il servizio tinyurl (http://tinyurl.com/) per generare url compatte e con simboli riconosciuti dalla maggior parte dei parser di tag [url] di forum.
Lo scrivo sul forum così che chiunque possa trarne vantaggio :-OK.

[...] se scrivo:
Code:
String output=valueOf(stringa);
non funziona..
perchè???non mi era mai capitato con altri metodi statici..
Ma è chiaro! Quando tu scrivi tale codice, il compilatore java (javac) tenta di risolvere il tuo nome valueOf trovando l'eventuale implementazione unica di un metodo che ha una signature compatibile con la tua semantica, cioè un metodo che accetti String (o un oggetto che appartiene a una delle classi derivate da String) e che restituisca un valore di tipo String o di una sottoclasse di String.
Poiché il metodo è specificato senza alcun oggetto/classe (se è static) su cui viene applicato (cioè non è nella forma oggetto.metodoclasse.metodo per i metodi static), allora viene cercato in sequenza prima fra i metodi della tua classe di qualunque livello di esposizione (anche private visto che siamo dentro la classe stessa) e poi, se non venisse trovato, risalendo la gerarchia delle superclassi della classe in cui viene invocato, ma ovviamente stavolta solo per il livello di esposizione/visibilità public e protected,fino a che non termina la gerarchia (cioè si giunge alla classe Object). Siccome Es55 non estende alcuna classe (oltre a Object, che tutte estendono in modo predefinito e non mutabile) allora la ricerca termina subito e ti viene restituito un errore cannot find symbol, poiché tale simbolo (method valueOf(char[])) non è presente nei posti in cui ti ho descritto che viene cercato.
 .ciaociao



Title: Re:Ordinamento caratteri di una stringa
Post by: Fr3d3R!K on 10-01-2009, 13:23:21
questo tinyurl non lo conoscevo, molto utile come servizio, grazie mille!
Per quanto riguarda il problema del metodo valueOf ammetto di non conoscere nemmeno io il motivo (lo immaginavo ma non sapevo se ciò che pensavo fosse giusto o meno)...


Title: Re:Ordinamento caratteri di una stringa
Post by: k1r4 on 10-01-2009, 13:29:51
ma il motivo l'ha spiegato chiaramente reversengineer.
Quello è un metodo statico della classe String... cosa c'è di strano?


Title: Re:Ordinamento caratteri di una stringa
Post by: savvo on 16-01-2009, 00:56:45
Penso che il modo corretto di usare valueOf sia questo.
Code:
String output=String.valueOf(stringa);