Visualizzazione dei risultati da 1 a 5 su 5

Discussione: input e output in java

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    input e output in java

    ciao a tutti!!
    Sono nuovo del java, e ultimamente sto leggendo un pò come funziona.
    Ho visto che i cicli, variabili, condizioni e operatori sono identici al c/c++.
    Cambia però l'input e l'output.
    Qui ho fatto un esercizio (somma) che li tratta tutte e due, ma mi da il seguente errore:

    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    Unhandled exception type IOException
    Unhandled exception type IOException

    at Main.main(Main.java:6)

    Ecco il codice:

    codice:
    public class Main 
    {
    	public static void main(String[] args) 
    	{
    		int a, b, s;
    		a=System.in.read();
    		b=System.in.read();
    		s=a+b;
    		System.out.println(s);
    	}
    }

  2. #2
    Devi sapere che molti linguaggi hanno il concetto di eccezione. Anche Java lo ha e mette a disposizione il costrutto try...catch per gestire queste eccezioni, che sono situazioni anomale (ad esempio, una divisione per zero).
    In Java esistono le eccezioni checked. Se utilizzi un metodo che specifica un'eccezione checked e non la gestisci, allora non è possibile portare a termine la compilazione.
    Un altro modo è specificare che anche il metodo che usa il metodo che specifica l'eccezione checked, lancia quella particolare eccezione (o una superclasse dell'eccezione).

    Nel tuo caso, il metodo read della classe InputStream (l'oggetto in che tu usi è di questa classe), specifica un'eccezione checked IOException.

    Nel tuo sorgente, puoi fare così:

    codice:
    import java.io.IOException;
    
    public class Main
    {
    	public static void main(String[] args)
    	{
    		try
    		{
    			int a, b, s;
    			a=System.in.read();
    			b=System.in.read();
    			s=a+b;
    			System.out.println(s);
    		}
    		catch(IOException ex)
    		{
    			ex.printStackTrace();
    		}
    	}
    }
    Oppure così:

    codice:
    package desktop;
    
    import java.io.IOException;
    
    public class Main
    {
    	public static void main(String[] args) throws IOException
    	{
                int a, b, s;
                a=System.in.read();
                b=System.in.read();
                s=a+b;
                System.out.println(s);
            }
    }
    Forse, per il momento, questo va meglio per te, almeno fino a quando non studierai la gestione delle eccezioni (ti consiglio di farlo al più presto).

    Una nota sul tuo programma. Se vuoi leggere un intero, non puoi usare la read, in quanto questa legge un byte e non un numero intero.
    Devi usare la classe Scanner:

    codice:
    package desktop;
    
    import java.util.Scanner;
    
    public class Main
    {
    	public static void main(String[] args)
    	{
                int a, b, s;
                Scanner scanner = new Scanner(System.in);
                a = scanner.nextInt();
                b = scanner.nextInt();
                s = a + b;
                System.out.println(s);
            }
    }
    Nota che il metodo nextInt non specifica eccezioni checked, quindi non è obbligatoria la gestione delle eccezioni.

    Potresti avere qualche dubbio su qualche punto, quindi chiedi pure.

    edit: Prova, utilizzando l'esempio che ti ho mostrato, a dare in input una cosa che non sia un intero (ad esempio puoi scriver "ciao").
    Ottieni la seguente eccezione: java.util.InputMismatchException.
    Questo è il classico esempio di anomalia. Il programma si aspetta un intero e l'utente gli da qualcos'altro. La gestione delle eccezioni serve proprio a questo. Gestire le situazioni anomale prevedibili.
    Ad esempio, gestendo l'eccezione java.util.InputMismatchException, puoi indicare all'utente che non ha inserito un intero, esortandolo a immettere un nuovo input.

    codice:
    package desktop;
    
    import java.util.Scanner;
    import java.util.InputMismatchException;
    
    public class Main
    {
    	public static void main(String[] args) throws Exception
    	{
                int a, b, s;
                boolean ok = false;
                Scanner scanner = new Scanner(System.in);
    
                while(!ok)
                {
                    try
                    {
                        System.out.print("a = ");
                        a = scanner.nextInt();
                        System.out.print("b = ");
                        b = scanner.nextInt();
                        s = a + b;
                        System.out.println(s);
                        ok = true;
                    }
                    catch(InputMismatchException ex)
                    {
                        System.out.println("Non hai inserito un intero, ripeti");
                        if(scanner.hasNext()) // scarto tutti i caratteri nel buffer di input
                            scanner.next();
                    }
                }
            }
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    cavolo!!! non pensavo c'era da sapere tutto questo per leggere un dato.
    Gentilmente mi sapresti indicare una pagina su internet dove spiega tutti i tipi di lettura da utente?
    perchè mi par di capire che ci si comporta in modo diverso a seconda se ci aspettiamo di ricercere una char o un int o un array...
    grazie

  4. #4
    La gestione dell'IO in Java è particolare. Puoi utilizzare System.in opportunamente incapsulato in altri oggetti e leggere stringhe per poi castarle verso il tipo desiderato. Puoi utilizzare la classe Console. Puoi utilizzare i vari metodi di Scanner.
    L'argomento, come vedi, è decisamente vasto, specialmente per chi si è avvicinato da poco al linguaggio.

    Qui trovi la documentazione riguardo la classe Scanner:
    Scanner

    Nota i vari metodi: "String nextLine()", "double nextDouble()", "int nextInt()"...
    Utilizzando questa classe puoi leggere diversi tipi di dato molto facilmente.

    Qui trovi diversi esempi a riguardo
    http://www.java2s.com/Code/Java/Deve...ss/Console.htm

    Questi invece sono due piccoli articoli che ho scritto su Scanner e Console:

    Scanner
    Console

    Non capirci molto all'inizio è normale, non preoccuparti. Ti consiglio un libro comunque essendo un argomento piuttosto particolare.


  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ok. grazie ancora
    molto esauriente

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