Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    103

    [JAVA] Come correggo unreported exception

    Sto studiando JAVA e ho provato a fare un piccolo esercizio. Ho un triangolo e fornisco in input le misure dei lati. Il programma deve darmi il perimetro del triangolo. Ho fatto così:

    import java.io.*;

    class LeggiEScrivi{
    static double leggi(double val1){
    System.out.println("Inserisci il valore richiesto: ");
    InputStreamReader flusso = new InputStreamReader(System.in);
    BufferedReader lex = new BufferedReader(flusso);
    String input = lex.readLine();
    val1 = Double.parseDouble(input);
    return val1;
    }
    static double perimetro(double val1,double val2,double val3){
    return val1+val2+val3;

    }
    public static void main(String[] args)throws IOException{
    double a = 0, b = 0, c = 0;
    leggi(a);
    leggi(b);
    leggi(c);

    System.out.println(perimetro(a,b,c));
    }
    }
    Ma mi dà questo errore:
    LeggiEScrivi.java:8: unreported exception java.io.IOException; must be caught or declared to be thrown
    String input = lex.readLine();
    Che significa?
    neho

  2. #2

    Re: [JAVA] Come correggo unreported exception

    Originariamente inviato da neho34
    Sto studiando JAVA e ho provato a fare un piccolo esercizio. Ho un triangolo e fornisco in input le misure dei lati. Il programma deve darmi il perimetro del triangolo. Ho fatto così:

    import java.io.*;

    class LeggiEScrivi{
    static double leggi(double val1){
    System.out.println("Inserisci il valore richiesto: ");
    InputStreamReader flusso = new InputStreamReader(System.in);
    BufferedReader lex = new BufferedReader(flusso);
    String input = lex.readLine();
    val1 = Double.parseDouble(input);
    return val1;
    }
    static double perimetro(double val1,double val2,double val3){
    return val1+val2+val3;

    }
    public static void main(String[] args)throws IOException{
    double a = 0, b = 0, c = 0;
    leggi(a);
    leggi(b);
    leggi(c);

    System.out.println(perimetro(a,b,c));
    }
    }
    Ma mi dà questo errore:
    LeggiEScrivi.java:8: unreported exception java.io.IOException; must be caught or declared to be thrown
    String input = lex.readLine();
    Che significa?
    L'errore significa che non hai catturato l'eccezione IoException lanciata in fase si lettura dello stream,è sufficiente racchiudere la parte di codice che lancia l'eccezione (controlla la documentazione ma a occhi e croce è questa:
    codice:
     InputStreamReader flusso = new InputStreamReader(System.in);
    BufferedReader lex = new BufferedReader(flusso);)
    in un blocco try{ ... }catch(IoEception e){} dove al posto dei puntini va la parte dio codice suddetta
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    103
    Perfetto l'ho un pò cambiato, ma funziona. Dammi una tua opinione, tipo se si potevano evitare ripetizioni etc:
    import java.io.*;

    class LeggiEScrivi{
    static double leggi(double val1, double val2, double val3){
    try{
    System.out.println("Inserisci il valore richiesto del lato1: ");
    InputStreamReader flusso = new InputStreamReader(System.in);
    BufferedReader lex = new BufferedReader(flusso);
    String input = lex.readLine();
    val1 = Double.parseDouble(input);
    System.out.println("Inserisci il valore richiesto del lato2: ");
    InputStreamReader flusso1 = new InputStreamReader(System.in);
    BufferedReader lex1 = new BufferedReader(flusso1);
    input = lex1.readLine();
    val2 = Double.parseDouble(input);
    System.out.println("Inserisci il valore richiesto del lato3: ");
    InputStreamReader flusso2 = new InputStreamReader(System.in);
    BufferedReader lex2 = new BufferedReader(flusso2);
    input = lex2.readLine();
    val3 = Double.parseDouble(input);

    }
    catch(IOException e){
    System.out.println(e);
    }
    double risultato = val1+val2+val3;
    return risultato;
    }
    public static void main(String[] args)throws IOException{
    double a = 0, b = 0, c = 0;

    System.out.println(leggi(a,b,c));
    }
    }
    neho

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    hai creato flusso, usalo su ogni richiesta

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    E' inutile pasare i valori a, b, c al metodo leggi in quanto resteranno immodificati all'uscita dal metodo: i parametri in java son opassati per valore, ovvero per copia. Io avrei fatto un metodo leggi() che restituisce il double letto da console, e poi avrei chiamato questo metodo tre volte per leggere i lati del triangolo.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    103
    In effetti all'inizio avevo fatto così, ma il risultato era 0.0.
    import java.io.*;

    class LeggiEScrivi{
    static double leggi(double val1){
    try{
    System.out.println("Inserisci il valore richiesto del lato1: ");
    InputStreamReader flusso = new InputStreamReader(System.in);
    BufferedReader lex = new BufferedReader(flusso);
    String input = lex.readLine();
    val1 = Double.parseDouble(input);

    }
    catch(IOException e){
    System.out.println(e);
    }
    return val1;
    }
    public static void main(String[] args)throws IOException{
    double a = 0, b = 0, c = 0;
    leggi(a);
    leggi(b);
    leggi(c);
    double risultato = a+b+c;
    System.out.println(risultato);
    }
    }
    Sono sicuro che il mio sbaglio sta nel passaggio di valori. Ma non riesco a correggerlo.
    Grazie comunque per l'aiuto.
    neho

  7. #7
    Ok ti hanno già fatto pressapoco i commenti ch eti avrei fatto anche io,solo una cosa METTI I TAG CODE QUANDO POSTI DEL CODICE!!! Non l'hai fatto nemmeno una benedetta volta.Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    103
    Scusami, non l'ho fatto a posta. É stata solo una distrazione.
    neho

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    devi assegnare il valore di ritorno di leggi() alle variabili a, b e c che non è necessario passare come argomento:

    class LeggiEScrivi{
    static double leggi(){
    try{
    System.out.println("Inserisci il valore richiesto del lato1: ");
    InputStreamReader flusso = new InputStreamReader(System.in);
    BufferedReader lex = new BufferedReader(flusso);
    String input = lex.readLine();
    int val1 = Double.parseDouble(input);

    }
    catch(IOException e){
    System.out.println(e);
    }
    return val1;
    }
    public static void main(String[] args)throws IOException{
    double a = 0, b = 0, c = 0;
    a = leggi();
    b = leggi();
    c = leggi();
    double risultato = a+b+c;
    System.out.println(risultato);
    }
    }

    Inoltre dovresti catturare anche l'eccezione NumberFormatException che puo essere lanciata da parseDouble se la stringa non rappresenta un numero.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

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.