Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142

    Strano errore in lettura da input con Scanner

    Salve,anticipando che sono un giovane (e quindi inesperto) studente, vorrei qualche consiglio perchè non riesco a capire quali errori ho commesso che mi generano il seguente errore:

    in una applicazione ho bisogno di leggere più volte stringhe o interi dalla tastiera; allora ho definito dentro la classe ma al di fuori di ogni metodo una variabile

    static Scanner sc=new Scanner(System.in)

    in un primo metodo sc mi deve leggere un intero, e tutto funziona correttamente;
    in un secondo metodo vi è il seguente spezzone di codice:

    System.out.println("inserisci il titolo");
    String titolo=sc.nextLine();
    System.out.println("inserisci l autore");
    String autore=sc.nextLine();

    Tuttavia nel cmd quello che appare è:

    inserisci il titolo
    inserisci l'autore
    _

    cioè è come se saltasse a piè pari il primo nextLine,permettendomi quindi di inserire una sola stringa.

    Aggiungo che ho provato a definire due diversi oggetti Scanner e poi chiedere le due stringhe rispettivamente con i due oggetti ma il problema si ripresenta identico.

    In attesa di suggerimenti vi ringrazio anticipatamente.
    ciao
    <esistono cose che non esistono>

  2. #2
    Certo che è strano..

    Cmq prova il codice seguente e fammi sapere

    Codice PHP:
            Scanner sc = new Scanner(System.in);
            
            
    String[] titles = {"Inserisci il titolo""Inserisci l'autore"};
            
    String[] values = new String[titles.length];
            
            for(
    int i=0i<values.lengthi++)
            {
                
    System.out.println(titles[i]+":");
                
    values[i]=sc.nextLine();
                
    System.out.println();
            } 

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Intanto grazie per l'interessamento.Sai che succede? questo è il cmd

    Inserisci il titolo:

    Inserisci l'autore:
    _

    ancora una volta legge solo il secondo nextLine()

    Devo però precisare che l oggetto scanner è sempre dichiarato static e al di fuori di ogni metodo, così:

    public class XXXXX{
    static Scanner sc=new............

    public metodo1(....)
    ----
    public metodoN(.....)
    }// class

    Non so se questo influisce in qualche modo, ma se dichiaro sc in un metodo, anche nel main, non compila ovviamente (ho provato eh!).
    Grazie ancora
    <esistono cose che non esistono>

  4. #4
    Non so se questo influisce in qualche modo, ma se dichiaro sc in un metodo, anche nel main, non compila ovviamente (ho provato eh!).
    Grazie ancora
    Di sicuro il codice seguente ti funzionerà..(ovviamente devi contestualizzarlo al tuo programma)

    Codice PHP:
    import java.util.*;

    public class 
    PROVA {
        
        static 
    int inIntero()
        {
            
    Scanner sc=new Scanner(System.in);
            
    System.out.println("Inserisci intero: ");
            return 
    sc.nextInt();
        }
        
        static 
    String[] inString()
        {
            
    Scanner sc=new Scanner(System.in);
            
    String[] titles = {"Inserisci il titolo""Inserisci l'autore"};
            
    String[] values = new String[titles.length];
            
            for(
    int i=0i<values.lengthi++)
            {
                
    System.out.println(titles[i]+":");
                
    values[i]=sc.nextLine();
                
    System.out.println();
            }
            
            return 
    values;
        }
        
        public static 
    void main(String[] args
        {
            
    int i inIntero();
            
    String[] ss inString();
            
            
    System.out.println("Intero: "+i+"\nTitolo: "+ss[0]+"\nAutore: "+ss[1]);
        }


  5. #5
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Approffito di questa discussione perchè anchio riscontro lo stesso errore in questo codice:
    codice:
    while(loop) {
    	Scanner sc = new Scanner(System.in);
            System.out.println(menu);
    	System.out.print(question);
    			
    	int choise = sc.nextInt();
    	switch(choise) {
    		case 1: {
    			String term, meaning;
    			System.out.println("Term: ");
    			term = sc.nextLine();
    			System.out.print("Meaning: ");
    			meaning = sc.nextLine();
    			col.newTerm(term, meaning);
                            ...
    Ovvero quando cerco di leggere da tastiera il valore di Term mi viene direttamente chiesto quello di meaning, in questo modo:
    codice:
    Term:
    Meaning: input da inserire
    Tuttavia sono riuscito a risolvere questo problema con questa modifica:
    codice:
    while(loop) {
    	Scanner sc = new Scanner(System.in);
    	System.out.println(menu);
    	System.out.print(question);
    			
    	int choise = sc.nextInt();
    	switch(choise) {
    		case 1: {
    			Scanner input = new Scanner(System.in);
    			String term, meaning;
    		        System.out.println("Term: ");
    			term = input.nextLine();
    			System.out.print("Meaning: ");
    			meaning = input.nextLine();
    			col.newTerm(term, meaning);
                            ...
    Mi piacerebbe però sapere perchè succede tutto questo, in modo da capire quale sia il miglior approccio per risolvere questo inconveniente, visto che spesso mi si presenta...

  6. #6
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Ho trovato la rispota che cercavo, se qualcuno è interessato guardi qui.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Grazie davvero!
    Ora funziona, ma non vi nascondo che non ho capito bene il concetto che c'è dietro? Le invocazioni di nextLine si "mangiano" fra di loro?
    <esistono cose che non esistono>

  8. #8
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Dopo aver capito che cosa succede ho scritto un articoletto sul mio blog qui, spero ti sia chiaro.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    142
    Molto bene e molto interessante. Ma non è un problema che andrebbe risolto nella classe Scanner in java.util?
    <esistono cose che non esistono>

  10. #10
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Originariamente inviato da Pete
    Molto bene e molto interessante. Ma non è un problema che andrebbe risolto nella classe Scanner in java.util?
    Io credo di no, in quanto dopo averne capito la "dinamica" non si può parlare di errore, in quanto sia la classe Scanner che tutti i suoi metodi fanno perfettamente quello per cui sono stati progettati. Dobbiamo solo prestare un minimo di attenzione quando chiamiamo il metodo nextLine() dopo aver chiamato metodi come nextInt(), nextFloat(), ecc..

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.