Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Problemi di cast

  1. #1

    Problemi di cast

    ciao a tutti.. Su un programma devo fare un cast a Comparable ad una variabile di tipo String, e viceversa con un' altra.. In teoria non ci dovrebbero essere problemi visto che String implementa automaticamente Comparable e basterebbe fare:

    String s = "ciao";
    Comparable c = (Comparable) s;

    giusto??

    eppure il compilatore mi da' un errore come se non vedesse il cast..

    cosa dovrei fare?? grazie in anticipo..

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    problemi di cast
    Se accetti comparse, sono dei tuoi!
    Ma... cosa si gira?

    Intanto mettiamo subito in chiaro una cosa.

    Supponiamo che ho un Comparable c. Il compilatore non lo sa, ma io so che c non è solo un Comparable, ma qualcosa di più.. una String per esempio.

    Se scrivo
    codice:
    String s = c;
    ottengo errore di compilazione

    Ma se scrivo l'inverso:
    codice:
    Comparable c = s;
    Invece no.

    Il cast serve solo per dire al compilatore che una rana non è una rana, ma un principe azzurro. Se invece il compilatore vuole una rana, ma gli dai un principe azzurro, il compilatore non si lamenta mica! E non vuole il cast: lo fa lui gratis! Spero di aver reso l'idea.
    Evidentemente in questa fiaba il principe azzurro estende la rana.

    Quindi vedi un po' di scrivere per bene quale errore ti viene fuori.
    Forse adesso vado a nanna. E forse domani riesco a risponderti prima di andbin (quando scrivo puttanate viene sempre a ficcare il naso... ).
    Notte!

    E mi raccomando! VOGLIO TUTTO LO STACKTRACE!!!!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    Quindi dici che per non dare errori, la classe dovrebbe implementare Comparable?? (nelle soluzioni non lo fa)..

    cmq il codice e'..

    public class CodificatoreTester
    { public static void main(String[] args)
    {

    }
    }


    class Codificatore implements InvertibleDictionary
    { private StringPair [] v;
    private int vSize;

    public Codificatore()
    { v = new StringPair[10];
    vSize = 0;
    }

    public String toString()
    { for(int i = 0; i < vSize; i++)
    System.out.println(v[i]);
    }

    public boolean isEmpty()
    { return vSize == 0;
    }

    public void makeEmpty()
    { vSize = 0;
    }

    public void insert(Comparable key, Comparable value)
    { if(key == null)
    throw new DictionaryItemNotFoundException();

    try
    { remove(key);
    }

    catch (DictionaryItemNotFoundException e)
    {}


    for(int i = 0; i < vSize; i++)
    { if(v[i].word.equals(key))
    { v[i] = new StringPair((String) key, (String ) value);
    return;
    }
    }

    v[vSize++] = new StringPair((String) key, (String) value);
    }

    public void remove(Comparable key)
    { for(int i = 0; i < vSize; i++)
    { if(v[i].word.equals(key))
    { v[i] = v[vSize - 1];
    vSize--;
    }
    }

    throw new DictionaryItemNotFoundException();
    }


    public Object find(Comparable key)
    { for(int i = 0; i < vSize; i++)
    { if(v[i].word.equals(key))
    return v[i].code;
    }

    throw new DictionaryItemNotFoundException();
    }

    public InvertibleDictionary invert()
    { InvertibleDictionary i = new Codificatore();
    for( int j = 0; j < vSize; j++)
    { Comparable c = v[j].code;
    Comparable c1 = v[j].word;
    i.insert((Comparable) v[j].code, (Comparable) v[j].word );
    }

    return i;
    }

    private class StringPair
    { public StringPair(String word, String code)
    { this.word = word;
    this.code = code;
    }
    public String getWord()
    { return word;
    }

    public String getCode()
    { return code;
    }

    public String toString()
    { return word + " " + code;
    }

    private String word;
    private String code;
    }
    }

    interface InvertibleDictionary
    { boolean isEmpty();
    void makeEmpty();
    void insert(Comparable key, Comparable value);
    void remove(Comparable key);
    Object find(Comparable key);
    InvertibleDictionary invert();
    }

    class DictionaryItemNotFoundException extends RuntimeException
    {}

    Manca da scrivere il main ma per ora non è importante..
    questo programma dovrebbe creare un dizionario con all' interno coppie di stringhe e farci un codificatore..

    cmq il problema sta nei metodi insert e invert, dove i cast a string e comparable non funzionano..

    Nel metodo insert, il cast a String può essere fatto con .toString(), ma rimane il fatto che il cast a Comparable non funziona..

    incovertible types:
    found: Comaparable
    required: java.lang.String

    e viceversa..

    incovertible types:
    found: java.lang.String
    required: Comaparable

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Iniziamo a sistemare un po' di cose:

    Codice PHP:
    public class CodificatoreTester

        public static 
    void main(String[] args)
        {    }
    }

    class 
    Codificatore implements InvertibleDictionary
    {
        private 
    StringPair [] v;
        private 
    int vSize;

        public 
    Codificatore()
        { 
            
    = new StringPair[10];
            
    vSize 0;
        }

        public 
    String toString()
        { 
            for(
    int i 0vSizei++)
                
    System.out.println(v[i]);
                
            
    // MANCA IL RETURN
        
    }

        public 
    boolean isEmpty()
        { 
            return 
    vSize == 0;
        }

        public 
    void makeEmpty()
        { 
            
    vSize 0;
        }

        public 
    void insert(Comparable keyComparable value)
        { 
            if(
    key == null)
                throw new 
    DictionaryItemNotFoundException();

            try
            { 
                
    remove(key);
            }
            catch (
    DictionaryItemNotFoundException e)
            {
                
    // ASSASSINO!!! NON SI AMMAZZANO COSi' LE ECCEZIONI!!!
                // e.printStackTrace();
            
    }


            for(
    int i 0vSizei++)
            {
                if(
    v[i].word.equals(key))
                {
                    
    v[i] = new StringPair((String) key, (String ) value);
                    return;
                }
            }

            
    v[vSize++] = new StringPair((String) key, (String) value);
        }

        public 
    void remove(Comparable key)
        {
            for(
    int i 0vSizei++)
            {
                if(
    v[i].word.equals(key))
                {
                    
    v[i] = v[vSize 1];
                    
    vSize--;
                }
            }

            throw new 
    DictionaryItemNotFoundException();
        }


        public 
    Object find(Comparable key)
        {
            for(
    int i 0vSizei++)
            {
                if(
    v[i].word.equals(key))
                    return 
    v[i].code;
            }

            throw new 
    DictionaryItemNotFoundException();
        }

        public 
    InvertibleDictionary invert()
        {
            
    InvertibleDictionary i = new Codificatore();
            for( 
    int j 0vSizej++)
            {
                
    Comparable c v[j].code;
                
    Comparable c1 v[j].word;
                
    i.insert((Comparablev[j].code, (Comparablev[j].word );
            }

            return 
    i;
        }

        private class 
    StringPair
        
    {
            public 
    StringPair(String wordString code)
            {
                
    this.word word;
                
    this.code code;
            }
            public 
    String getWord()
            {
                return 
    word;
            }

            public 
    String getCode()
            {
                return 
    code;
            }

            public 
    String toString()
            {
                return 
    word " " code;
            }

            private 
    String word;
            private 
    String code;
        }
    }

    interface 
    InvertibleDictionary
    {
        
    boolean isEmpty();
        
    void makeEmpty();
        
    void insert(Comparable keyComparable value);
        
    void remove(Comparable key);
        
    Object find(Comparable key);
        
    InvertibleDictionary invert();
    }

    class 
    DictionaryItemNotFoundException extends RuntimeException
    {} 
    A questo punto forse qualcuno guarderà il codice con più interese.

    1. Leggi i commenti
    2. Leggi il regolamento: devi usare i tag [ code][/ code] oppure [ php][/php]
    3. Ti avevo espressamente chiesto lo stackTrace. DOV'E?
    4. Una String è un Comparable. L'errore che hai postato non è significativo. A parte il fatto che riporta Comaparable...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    scusa ma faccio java da 4 mesi e non ho assolutamente idea di cosa sia lo StackTrace.. comunque apparte il return in .toString che avevo dimenticato (di cui il compilatore non si era accorto ), ho fatto altri errori o il cast che ho scritto andava bene ed ho solo una sfiga tremenda ?

  6. #6
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    scusa ma faccio java da 4 mesi
    Nessuno è tanto piccolo nella giungla da non poter essere ucciso

    non ho assolutamente idea di cosa sia lo StackTrace
    Ci sono i motori di ricerca. Comunque la soluzione è tutta qui: e.printStackTrace();

    comunque apparte il return in .toString che avevo dimenticato (di cui il compilatore non si era accorto ),
    Eh? Il compilatore deve riuscire a decifrare quello che hai scritto. E non è detto che ci riesca. Se non vede un errore, è perchè nelle altre linee di codice c'è qualche altro errore che lo "nasconde". E per la stessa ragione è possibile che porzioni di codice corrette sembrino contenere degli errori.

    ho fatto altri errori o il cast che ho scritto andava bene ed ho solo una sfiga tremenda ?
    ...

    Non è che per farti aiutare devi costringere la gente a compilare la tua classe... forse quando compili viene fuori una bella lista di errori. Ecco, li voglio tutti. Dal primo all'ultimo. Così chiunque voglia aiutarti può scegliere quello che gli sembra più significativo.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #7
    ah ok, la lista degli errori ma non riesco a copiarli da DOS, ma comunque sono tutti uguali a quelli che ho scritto prima. Ho già provare a scrivere l' istrtuzione che mi avevo detto per tirar fuori lo stacktrace ma ovviamente ci sono gli errori sui cast che lo coprono..

  8. #8
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Dalla finestra dos:
    Col mouse fai click sul tasto destro.
    Scegli la voce "selezione tutto"
    Ora attento a non toccare nulla!
    Il testo è ancora selezionato? Ok, premi INVIO.
    Ora spostati su un editor di testo e incolla.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  9. #9
    Microsoft Windows XP [Versione 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:\Documents and Settings\Stefano>cd..c.
    Impossibile trovare il percorso specificato.

    C:\Documents and Settings\Stefano>cd..

    C:\Documents and Settings>cd..

    C:\>javac CodificatoreTester.java
    CodificatoreTester.java:47: inconvertible types
    found : Comparable
    required: java.lang.String
    { v[i] = new StringPair((String) key, (String) val
    ue);
    ^
    CodificatoreTester.java:47: inconvertible types
    found : Comparable
    required: java.lang.String
    { v[i] = new StringPair((String) key, (String) val
    ue);
    ^
    CodificatoreTester.java:52: inconvertible types
    found : Comparable
    required: java.lang.String
    v[vSize++] = new StringPair((String) key, (String) value);
    ^
    CodificatoreTester.java:52: inconvertible types
    found : Comparable
    required: java.lang.String
    v[vSize++] = new StringPair((String) key, (String) value);
    ^
    CodificatoreTester.java:79: inconvertible types
    found : java.lang.String
    required: Comparable
    { i.insert((Comparable)(v[j].code), (Comparable)(v[j].word
    ));
    ^
    CodificatoreTester.java:79: inconvertible types
    found : java.lang.String
    required: Comparable
    { i.insert((Comparable)(v[j].code), (Comparable)(v[j].word
    ));
    ^
    6 errors

    ecco..
    adesso sto provando a riscrivere il codice per vedere se ho fatto errori in precedenza..

  10. #10
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Cavolo! Mai vista una cosa del genere!

    Comunque ho preso il codice che ti ho postato prima (che non è altro che il tuo codice reindentato) e gli aggiunto un return null; sul metodo toString().

    Compila correttamente.

    A questo punto non posso che darti qualche consiglio per semplificarti la vita:
    1. Crea un file .java per ogni classe e per ogni interfaccia.
    2. indenta il codice correttamete.
    3. usa un editor decente, almeno come Notepad++ e controlla sempre che le parentesi {} corrispondano.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

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 © 2025 vBulletin Solutions, Inc. All rights reserved.