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

Discussione: Utilizzo parseInt

  1. #1

    Utilizzo parseInt

    Ciao ragazzi, ho scritto questo piccolo programmino per un testo d'esame che sto cercando di risolvere
    In pratica il programma legge da file, degli studenti formattati in un certo modo.
    Inizialmente dichiaro tutti gli attributi come String (Sto usando readLine() di bufferedReader) e glieli faccio leggere.
    Il programma stampa tutti gli attributi tranquillamente.

    Ora però, ad un passo successivo, il testo mi chiede di calcolare la media dei voti (votoPI sta per programmazione internet, votoLPI sta per lab.progr.internet) e quindi devo fare la media dei due voti per ottenere il voto complessivo di questo esame.

    Avevo letto che si può usare il metodo parseInt per fargli leggere le mie attuali strighe come interi ma non saprei dove mettere il codice.
    A naso ho scritto questo codice che vorrei inserire
    __________________________________________________ ____________________
    //SECONDA PARTE, CALCOLO MEDIA
    try
    {
    int pi = Integer.parseInt(votoPI);
    int lpi=Integer.parseInt(votoLPI);
    float media=(pi+lpi)/2;

    System.out.println (media);
    }
    catch (NumberFormatException e)
    {
    System.out.println ("La stringa NON contiene un intero valido");
    }
    __________________________________________________ ______________________

    Questo invece è il programmino:

    codice:
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    public class GestioneVotiPI {
    
    
        public static void main(String[] args) throws IOException {
            //FileNotFOund?
            try{
                FileReader fr=new FileReader("DatabaseVoti.txt");
                BufferedReader br=new BufferedReader(fr);
                ArrayList<Studente> listaStudenti=new ArrayList<Studente>();
    
    
                System.out.println("**********");
    
    
                String rigaLetta=br.readLine();
                while(rigaLetta!=null){
                    StringTokenizer st=new StringTokenizer(rigaLetta, "-");
                    String nome=st.nextToken();
                    String cognome=st.nextToken();
                    String matricola=st.nextToken();
                    String votoPI=st.nextToken();    // Integer.parseInt
                    String votoLPI=st.nextToken();   // Integer.parseInt
    
    
                    try{
                        Studente temp=new Studente(nome, cognome, matricola, votoPI,votoLPI);
                        listaStudenti.add(temp);
    
    
                    }
                    catch( NumberFormatException e )
                    {
                        System.out.println( "Errore DA DECIFRARE NEL CODICE: " + rigaLetta + "; record" );
                    }
    
    
    
    
                    rigaLetta = br.readLine( );
    
    
                }
                br.close( );
    
    
                for(Studente elementi:listaStudenti)
                    System.out.println(elementi.nome + " " + elementi.cognome+" "+elementi.matricola+" "+elementi.votoPI+" "+elementi.votoLPI);
                System.out.println("");
                System.out.println("**********");
    
    
            }catch(IOException e){
                System.out.println("Errore nella lettura file(corrotto)");
    
    
            }
        }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cicciozza Visualizza il messaggio
    Avevo letto che si può usare il metodo parseInt per fargli leggere le mie attuali strighe come interi ma non saprei dove mettere il codice.
    Lo inserisci appunto dove ti serve. Quale è il dubbio esattamente?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Se lo inserisco tra alcune parti di codice, votoPI e votoLPI non vengono riconosciuti come variabili.
    In altre parti mi da errori vari

    Ho più o meno intuito il funzionamento del parseInt ma non dove inserirlo esattamente per farlo funzionare.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cicciozza Visualizza il messaggio
    votoPI e votoLPI non vengono riconosciuti come variabili.
    votoPI e votoLPI sono due variabili LOCALI nel blocco del while ed esistono e sono "visibili" appunto solo nel blocco del white. Pertanto i due parseInt andrebbero messi appunto nel while e chiaramente dopo la dichiarazione di queste due variabili.

    E inoltre, non so come è fatta la classe Studente ma non ha granché senso che debba tenere i due voti come String.

    Quindi: i due nextToken(), ok.
    POI fai i due parseInt. Se sbuca fuori NumberFormatException è perché non sono numeri validi e quindi la riga è "malformata". Puoi segnalare l'errore all'utente e/o abortire il ciclo.
    POI a quel punto puoi creare un oggetto Studente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ok, allora se decido di dichiararli come interi, come faccio a farli leggere al BufferedReader?
    Se modifico la classe Studente e do come metodo readLine al BR( String rigaLetta=br.readLine(); ) mi va in errore perchè non ha metodi di lettura interi

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ma la lettura non devi cambiarla, così va bene. Una volta che hai la tua String votoPI, restuituita da nextToken(), applichi il parseInt a quella stringa, e poi al costruttore di Studente passerai l'intero ricevuto. Scegliendo se e come gestire l'errore ovviamente, come ti è stato consigliato

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cicciozza Visualizza il messaggio
    ok, allora se decido di dichiararli come interi, come faccio a farli leggere al BufferedReader?
    Con BufferedReader leggi "a righe" (String) e basta.
    Con StringTokenizer spezzi la riga in token (che sono sempre String!) e basta.
    E i token che ti aspetti siano interi li devi parsare TU nel modo che ritieni opportuno (es. parseInt di Integer).

    Tutto qui. Non cercare problemi dove non ce ne sono.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Ma la lettura non devi cambiarla, così va bene. Una volta che hai la tua String votoPI, restuituita da nextToken(), applichi il parseInt a quella stringa, e poi al costruttore di Studente passerai l'intero ricevuto. Scegliendo se e come gestire l'errore ovviamente, come ti è stato consigliato


    La classe Studente, accetta votoPI e votoLPI come Stringhe!
    mi spiegate come faccio a "trattarli" come interi e ridarli al costruttore come interi, visto che accetta String?

  9. #9
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Con BufferedReader leggi "a righe" (String) e basta.
    Con StringTokenizer spezzi la riga in token (che sono sempre String!) e basta.
    E i token che ti aspetti siano interi li devi parsare TU nel modo che ritieni opportuno (es. parseInt di Integer).

    Tutto qui. Non cercare problemi dove non ce ne sono.


    "nel modo che ritieni opportuno"...
    Sono ore che chiedo come diavolo si usa perchè mi sto scervellando da stamattina e non riesco a capire e piuttosto che darmi una BANALE (credo per voi ) soluzione,un esempio, perdete tempo con righe e righe di cose già dette
    boh.

    nell'altro post scrivo che non so dove inserire il codice e mi rispondi "inseriscilo dove ti serve" ,

    Mi dici di non tenere i voti come string e poi riparli di usare il parseInt nel post dopo.

    Ragà, ho bisogno d'aiuto, se potete darmelo bene altrimenti amici come prima ma non mi incasinate la testa con idee poco chiare per piacere

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da cicciozza Visualizza il messaggio
    La classe Studente, accetta votoPI e votoLPI come Stringhe!
    mi spiegate come faccio a "trattarli" come interi e ridarli al costruttore come interi, visto che accetta String?
    Il consiglio che ti è stato dato da andbin è proprio di dichiarare quelle variabili come interi nella classe Studente.
    Quindi una volta preso l'intero dalla stringa, passi semplicemente l'intero al costruttore.

    Questo non è obbligatorio ovviamente, puoi tenere la variabile come string, era solo un consiglio logico,visto che il voto è un numero.
    Se lo mantieni come stringa ok, non serve il parsing, ma a quel punto tutte le volte che vorrai trattare quella stringa come numero (ad esempio per fare una media, o qualsiasi altra cosa), dovrai riconvertirla in numero.

    Poi fai come vuoi
    Ultima modifica di Ansharja; 22-12-2016 a 21:36

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.