Pages: [1]   Go Down
Print
Author Topic: Ordinamento caratteri di una stringa  (Read 3153 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« 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?
« Last Edit: 08-01-2009, 16:01:39 by Alex_47 » Logged
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #1 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!
Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #2 on: 08-01-2009, 16:18:12 »

Allora come faccio a cambiare il carattere di una stringa?
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #3 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..
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #4 on: 08-01-2009, 16:42:16 »

Quoto Vivynz, ti conviene creare una nuova stringa di supporto!
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #5 on: 08-01-2009, 16:54:35 »

oppure usi il metodo 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).
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.
« Last Edit: 10-01-2009, 13:21:09 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #6 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..
« Last Edit: 08-01-2009, 17:40:56 by Vivynz » Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
k1r4
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 375


Il mio nick si pronuncia cappaunoerrequattro!!


WWW
« Reply #7 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
Logged

ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #8 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.
Puoi usare il servizio tinyurl 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.
 

Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #9 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)...
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
k1r4
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 375


Il mio nick si pronuncia cappaunoerrequattro!!


WWW
« Reply #10 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?
Logged

savvo
Matricola
*
Offline Offline

Posts: 23


« Reply #11 on: 16-01-2009, 00:56:45 »

Penso che il modo corretto di usare valueOf sia questo.
Code:
String output=String.valueOf(stringa);
Logged
Pages: [1]   Go Up
Print
Jump to: