PDA

Visualizza la versione completa : [JAVA] Non fa il casting


cso
15-04-2005, 15:51
Salve.

Sto sviluppando una classe che da in pasto a NotazionePolacca.java degli interi e dei char per fare in modo di sviluppare l'espressione in notazione polacca.

Il seguente codice funziona perfettamente.


import java.io.*;

public class ProvaNotazionePolacca
{
public static void main (String args[]) throws IOException, EmptyListException
{
NotazionePolacca e = new NotazionePolacca();

e.aggiungi(10).aggiungi(45).aggiungi('+').aggiungi (20).aggiungi(17).aggiungi('-').aggiungi('*');

e.aggiungi(10).aggiungi(45);
e.aggiungi('+');

System.out.println("Il valore dell'espressione e' "+e.Valore()+"\n");
}
}

Ma se cerco di fare un programma analogo che però legga da tastiera l'espressione sembra che non venga fatto il cast da char a int.


import java.io.*;

public class ProvaNotazionePolacca
{
public static void main (String args[]) throws IOException, EmptyListException
{
NotazionePolacca e = new NotazionePolacca();

InputStreamReader input = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(input);

System.out.print("Inserisci l'espressione: ");

String s = tastiera.readLine();

for (int i=0 ; i < s.length() ; i++ )
{
if (s.charAt(i)!=' ')
{
if (s.charAt(i)=='+' || s.charAt(i)=='-' || s.charAt(i)=='*' || s.charAt(i)=='/') e.aggiungi(s.charAt(i));
else e.aggiungi( ((Integer)s.charAt(i)).intValue());
}
}

System.out.println("Il valore dell'espressione e' "+e.Valore()+"\n");
}
}

e mi da il seguente errore:


C:\...\java\Stack\ProvaNotazionePolacca.java:50: inconvertible types
found : char
required: java.lang.Integer
e.aggiungi( ((Integer)s.charAt(i)).intValue() );

Grazie per l'interessamento :ciauz:

P.S. si può fare qualcosa con StringTokenizer, se si come?

dekdek
15-04-2005, 15:56
Forse ti serve questa (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character.html#digit(char,%20int))

floyd
15-04-2005, 15:58
e.aggiungi( (int)s.charAt(i));

cso
15-04-2005, 16:15
Originariamente inviato da floyd
e.aggiungi( (int)s.charAt(i));
così mi fa la somma dei caratteri e non dei numeri...

@dekdek: non sono ancora al livello di interpretare le API, ho capito che fa ma non so come usarlo perchè java mi fa venire l'ulcera.

dekdek
15-04-2005, 16:21
Parlare di API per la classe Character mi sembra un po' esagerato, fa parte di java.lang.* dopotutto...
Cmq:



char c = una cifra in base 10;
int valore = digit (c,10); // dove 10 e' la base di numerazione

LeleFT
15-04-2005, 16:28
Il problema, come ti ha evidenziato anche floyd, è che stai tentando di castare un tipo di dato primitivo in un oggetto di tipo Integer.

Il metodo charAt() restituisce un tipo di dato char che è un tipo di dato primitivo e non un oggetto. Se lo vuoi trasformare in int devi utilizzare la classe Integer in un altro modo:


e.aggiungi( Integer.parseInt( "" + s.charAt(i) ) );

Attenzione che se il carattere passato non rappresenta una cifra, allora verrà sollevata una NumberFormatException.


Ciao. :ciauz:

cso
15-04-2005, 16:28
else {
char c = s.charAt(i);
int valore = digit (c,10);
e.aggiungi(valore);
}

errore:


C:\...\java\Stack\ProvaNotazionePolacca.java:51: cannot find symbol
symbol : method digit(char,int)
location: class ProvaNotazionePolacca
int valore = digit (c,10);
^
1 error
:master:

dekdek
15-04-2005, 16:31
Uhm... Usa:

Character.digit (c,10);

cso
15-04-2005, 16:32
Originariamente inviato da LeleFT
Il problema, come ti ha evidenziato anche floyd, è che stai tentando di castare un tipo di dato primitivo in un oggetto di tipo Integer.

Il metodo charAt() restituisce un tipo di dato char che è un tipo di dato primitivo e non un oggetto. Se lo vuoi trasformare in int devi utilizzare la classe Integer in un altro modo:


e.aggiungi( Integer.parseInt( "" + s.charAt(i) ) );

Attenzione che se il carattere passato non rappresenta una cifra, allora verrà sollevata una NumberFormatException.


Ciao. :ciauz:
grazie per la dritta, funzia a meraviglia.
quando faccio partire javac e sento il terribile rumorino (tipo errore di windows) mi vien da prendere il computer e spaccarlo in mille pezzi.

odio java con tutto il cuore (e questo mi dispiace), sono invece appassionato di assembly.

cso
15-04-2005, 16:34
Originariamente inviato da dekdek
Uhm... Usa:

Character.digit (c,10);
ok, mi ero dimenticato il character... :stordita:

ok, ora ho due soluzioni al problema.

grazie per l'aiuto :ciauz:

Loading