Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92

    [java] Strano output con datainputstream

    Scusate ho provato ad assegnare a un array di cinque elementi dei valori interi con i l seguenete programma:

    /**
    * @(#)Principale1.java
    *
    *
    * @author
    * @version 1.00 2007/5/23
    */
    import java.io.*;

    public class Principale1 {

    /**
    * Creates a new instance of <code>Principale1</code>.
    */
    public Principale1() {
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
    int elementi[] = new int[5];
    DataInputStream myInput = new DataInputStream (System.in);
    for(int i=0; i<5; i++)
    {
    try {
    elementi[i] = myInput.readInt();
    System.out.println(elementi[i]);
    }
    catch (IOException e) {
    System.out.println ("Si è verificato un errore: " + e);
    }
    }


    for(int i=0; i<5; i++)
    {
    System.out.println(elementi[i]);

    }
    }

    }


    ma quando vado a mandare in esecuzione mi dà tutti numeri strani.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] Strano output con datainputstream

    Originariamente inviato da salvio78
    Scusate ho provato ad assegnare a un array di cinque elementi dei valori interi con i l seguenete programma:

    int elementi[] = new int[5];
    DataInputStream myInput = new DataInputStream (System.in);
    DataInputStream non è propriamente la classe più adatta per leggere dallo standard-input!!

    Ad esempio readInt() di DataInputStream si aspetta di leggere esattamente 4 byte che contengono i valori binari da comporre insieme per ottenere un int.
    Tu invece sullo standard-input inserisci dei caratteri, es. "123" cioè i caratteri '1' (0x31), '2' (0x32), '3' (0x33), quindi non c'entra un bel nulla.

    Piuttosto usa System.in per creare uno Scanner (java.util.Scanner).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92
    Ma che dirti, io è da un pezzo che non uso java ma pur avendo usato bufferedReader, usando poi il metodo statico ToValue per convertire la stringa ottenuta da streaming in un intero.

    Comunque volevo precisare una cosa, se il tipo do default in java e l'int quando io vado a immettere un numero, la jvm non lo rappresenta come int e quindi con 4 byte, dunque readInt non dovrebbe prendere tale valore? Come dici tu non mi basterebbe, anche se superfluo, castare a int per farglielo rappresentare correttamente?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da salvio78
    Comunque volevo precisare una cosa, se il tipo do default in java e l'int quando io vado a immettere un numero, la jvm non lo rappresenta come int e quindi con 4 byte, dunque readInt non dovrebbe prendere tale valore? Come dici tu non mi basterebbe, anche se superfluo, castare a int per farglielo rappresentare correttamente?
    Attenzione: una cosa è leggere 4 byte e comporli per ottenere un int (come fa readInt() di DataInputStream) e una cosa è leggere un tot di byte che rappresentano dei digit, es. '1', '2', '3' e ottenere un int di valore 123 (come farebbe nextInt() di Scanner).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92
    E se volessi risolvere il problema senza la classe scanner?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    usi un BufferedReader, lo wrappi attorno all'InputStreamReader che crei su System.in

    BufferedReader legge una riga alla volta, se necessario, ti resta di fare la conversione in intero con Integer.intValue()

    qualcosa del genere:
    codice:
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    int[] numeriLetti = new int[5];
    for (int i = 0; i < numeriLetti.length; i++) {
                numeriLetti[i] = (new Integer(in.readLine())).intValue();
                System.out.println(numeriLetti[i]);
    }
    bada che non sto facendo controlli sull'input, per cui se ci schiaffi dentro qualcosa di diverso da un intero ti salta fuori un'eccezione.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92
    ho modificato il codice.

    /**
    * @(#)Principale1.java
    *
    *
    * @author
    * @version 1.00 2007/5/23
    */
    import java.io.*;

    public class Principale1 {

    /**
    * Creates a new instance of <code>Principale1</code>.
    */
    public Principale1() {
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    int[] numeriLetti = new int[5];

    for(int i=0; i<numeriLetti.length; i++)
    {
    try {
    numeriLetti[i] = (new Integer(in.readLine())).intValue();
    }
    catch (IOException e) {
    System.out.println ("Si è verificato un errore: " + e);
    }
    }


    for(int i=0; i<5; i++)
    {
    System.out.println(numeriLetti[i]);

    }
    }

    }


    Ma come mi accadeva all'inizia mi stampa sempre e solo il primo elemento quando esegue il secondo ciclo.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    A me funziona perfettamente.


    PS: Usa gli appositi tag [*CODE] e [*/CODE] (senza l'asterisco rosso) per scrivere il codice, così rimane più leggibile.


    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
    Registrato dal
    Feb 2006
    Messaggi
    92
    ok, grazie.

    codice:
    /**
     * @(#)Principale1.java
     *
     *
     * @author 
     * @version 1.00 2007/5/23
     */
    import java.io.*;
    
    public class Principale1 {
            
        /**
         * Creates a new instance of <code>Principale1</code>.
         */
        public Principale1() {
        }
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
          BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    	  int[] numeriLetti = new int[5];
         
             for(int i=0; i<numeriLetti.length; i++)
             {
    	        try { 
    			     numeriLetti[i] = (new Integer(in.readLine())).intValue();
    	         } 
    	         catch (IOException e) {
    	           System.out.println ("Si è verificato un errore: " + e);
    			}	
             }
    	      	
    		
    		 for(int i=0; i<numeriLetti.length; i++)
             {
             	System.out.println(numeriLetti[i]);
    	        
    			}
    		} 
         
    }

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.