Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1

    problema con string.split()

    ciao a tutti
    domani ho un esame di java ma sto linguaggio proprio non lo capisco xD

    mi serve di leggere una stringa nel formato esame#cfu#voto per poi usare cfu e voti per calcolare una media pesata degli esami. boiata, vero?... in qualunque altro linguaggio si, ma qui javac ha deciso di mettermi il bastone tra le ruote! Vi posto il codice che ho scritto:

    codice:
    import java.io.*;
    
    class Media{
    	public static void main(String[] args){
    		int tot_cfu = 0, tot_v = 0, d = 0, i = 0;
    		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    		double media = 0;
    		String input = "";
    		String[] tokens = {"","",""};
    		try{
    			do{
    				System.out.print("\nesame#cfu#voto :"); input = in.readLine();
    				if(input.toUpperCase()!="END"){
    					tokens = input.split("#");
    					for(i=1;i<=2;i++){
    						if (i == 1)
    							tot_cfu += Integer.parseInt(tokens[i]);
    						else
    							tot_v += Integer.parseInt(tokens[i]);
    					}
    					d++;
    				}
    			}while(input.toUpperCase()!="END");
    			System.out.print(tot_cfu+"  "+tot_v+"\n");
    		}
    		catch(Exception e){	System.out.print("Input error.\n");	}
    	}
    }
    il codice ovviamente non è finito ma qui si blocca. mi lascia immettere un qualsiasi numero di esami ma quando scrivo END mi genera un exception e mi stampa il messaggio di errore nella catch() senza eseguire la print dopo il while...

    qualcuno saprebbe darmi una spiegazione per favore?

    grazie in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306

    Re: problema con string.split()

    Originariamente inviato da ultimateshadow
    qualcuno saprebbe darmi una spiegazione per favore?

    grazie in anticipo
    Certo, ma se non ci dici QUALE Exception viene lanciata, eventualmente indicando anche la riga dove viene lanciata... che facciamo? Tiriamo ad indovinare?

    Tieni anche presente che i confronti con le stringhe NON si fanno con gli operatori == o !=, ma usando il metodo "equals()". Le stringhe sono oggetti, non tipi di dato primitivi.


    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

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    è sbagliata la condizione i questo if

    if(input.toUpperCase()!="END"){


    devi cambiarla con

    if(!input.toUpperCase().equals("END")){

    o meglio ancora con

    if(!input.equalsIgnoreCase("end")){

  4. #4
    oddio mi sento tanto stupido....
    ho finito 2 ore fa di prendere per il **** il prof perché ha perso mezz'ora per capire che c'era quest'errore sul listato di u mio compagno e ora faccio al stessa cretinata... che vergogna! ahaha

    comunque grazie bstefano, funziona! ero lì a cercare di scovare qualche strana finezza... ahahah

    @LeleFT: l'exc era ArrayIndexOutOfBoundsException, ma a me avrebbe solo confuso xD e il quando l'avevo detto, ossia quando inserivo "END" alla richiesta di input

  5. #5

    Re: problema con string.split()

    edit: avete risolto.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306
    Originariamente inviato da ultimateshadow
    @LeleFT: l'exc era ArrayIndexOutOfBoundsException, ma a me avrebbe solo confuso xD e il quando l'avevo detto, ossia quando inserivo "END" alla richiesta di input
    Sì, ma sono informazioni importanti per chi cerca di aiutarti... non ho chiesto "quando" viene sollevata l'eccezione, ma la riga del codice dove viene sollevata... Java la indica sempre nelle eccezioni:

    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
            at NomeClasse.metodo(NomeFile.java:5)
    Significa che è stata sollevata una ArrayIndexOutOfBoundsException all'interno del metodo "metodo" della classe "NomeClasse" contenuta nel file "NomeFile.java" alla riga 5.


    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
    Originariamente inviato da LeleFT
    Sì, ma sono informazioni importanti per chi cerca di aiutarti... non ho chiesto "quando" viene sollevata l'eccezione, ma la riga del codice dove viene sollevata... Java la indica sempre nelle eccezioni:

    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
            at NomeClasse.metodo(NomeFile.java:5)
    Significa che è stata sollevata una ArrayIndexOutOfBoundsException all'interno del metodo "metodo" della classe "NomeClasse" contenuta nel file "NomeFile.java" alla riga 5.


    Ciao.
    hai ragione ma questo te lo da a compilazione a me l'errore lo dava a runtime e per scrivertelo ho modificato la catch così
    codice:
    catch(Exception e){ System.out.print("Input error\t"+e+"\t.\n"); }
    e tutto quello che mi aveva detto era java.lang.ArrayIndexOutOfBoundsException: 1 cosa che (A) leggendo array out of bound vado a vedere se c'è un problema nella split o nel for (B) se tolgo la try/catch pensavo che non compilasse proprio, no?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306
    Originariamente inviato da ultimateshadow
    hai ragione ma questo te lo da a compilazione
    No... le eccezioni vengono sollevate SOLO ed ESCLUSIVAMENTE a Runtime. Gli errori in compilazione (non i Warnings) non permettono la creazione dei file .class e la successiva esecuzione del codice).

    a me l'errore lo dava a runtime e per scrivertelo ho modificato la catch così
    codice:
    catch(Exception e){ System.out.print("Input error\t"+e+"\t.\n"); }
    e tutto quello che mi aveva detto era java.lang.ArrayIndexOutOfBoundsException: 1 cosa che (A) leggendo array out of bound vado a vedere se c'è un problema nella split o nel for (B) se tolgo la try/catch pensavo che non compilasse proprio, no?
    Non va bene: in questo modo tu uccidi le eccezioni, senza farti restituire le informazioni necessarie.

    Il modo corretto di procedere è questo:

    codice:
    try {
       ... // Istruzioni
    } catch (TipoEccezione te) {
       te.printStackTrace();
       ... // altre gestioni
    }
    In questo modo viene stampato il trace dell'eccezione, con tutte le informazioni (metodo, nome classe, nome file e riga).


    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

  9. #9
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    comunque cosa succede è molto chiaro apparte l'errore dell'if l'eccezione può ripetersi comunque, invece di end prova a scivere ciao e vedrai che ti da la stessa eccezione

    per evitare l'eccezione devi controllare che la stringa inserita sia formattata correttamente

    io farei una cosa del genere

    codice:
           tokens = input.split("#");
           if(tokens.size()==3)
           {
               for(i=1;i<=2;i++){
    	    if (i == 1)
    	        tot_cfu += Integer.parseInt(tokens[i]);
    	    else
    	        tot_v += Integer.parseInt(tokens[i]);
               }
           }
           else
           {
                     System.out.println("Errore! il formato della stringa non è stato inserito correttamente");
            }
          d++;

  10. #10
    Ma .... utilizzare lo StringTokenizer ... no?

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