Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,062

    [JAVA] Non fa il casting

    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.
    codice:
    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.
    codice:
    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:
    codice:
    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

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

  2. #2
    Forse ti serve questa
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,841
    e.aggiungi( (int)s.charAt(i));

  4. #4
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,062
    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.

  5. #5
    Parlare di API per la classe Character mi sembra un po' esagerato, fa parte di java.lang.* dopotutto...
    Cmq:

    codice:
    char c = una cifra in base 10;
    int valore = digit (c,10); // dove 10 e' la base di numerazione
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,083
    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:
    codice:
    e.aggiungi( Integer.parseInt( "" + s.charAt(i) ) );
    Attenzione che se il carattere passato non rappresenta una cifra, allora verrà sollevata una NumberFormatException.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,062
    codice:
    				else {
                            char c = s.charAt(i);
    						int valore = digit (c,10);
                            e.aggiungi(valore);
    					 }
    errore:
    codice:
    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:

  8. #8
    Uhm... Usa:

    Character.digit (c,10);
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  9. #9
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,062
    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:
    codice:
    e.aggiungi( Integer.parseInt( "" + s.charAt(i) ) );
    Attenzione che se il carattere passato non rappresenta una cifra, allora verrà sollevata una NumberFormatException.


    Ciao.
    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.

  10. #10
    Utente di HTML.it L'avatar di cso
    Registrato dal
    Aug 2004
    Messaggi
    2,062
    Originariamente inviato da dekdek
    Uhm... Usa:

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

    ok, ora ho due soluzioni al problema.

    grazie per l'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.