Problema classe scanner

di il
11 risposte

Problema classe scanner

Buongiorno a tutti,
sono nuovo di questo forum ma soprattutto sono un super novellino riguardo a java.
Ho iniziato da poco a usare java e ho trovato un esercizio k volevo risolvere ma ho delle difficoltà. Vorrei sapere se qualcuno può aiutarmi. Intanto spiego il problema, il testo dell'esercizio recita questo:
Lettura di una sequenza di numeri inseriti manualmente dall'utente. Dopo aver digitato tutte le cifre che compongono il numero premere invio. L'utente può inserire una sequenza lunga a piacere e per indicare che la sequenza è terminata, premerà invio senza aver inserito alcuna cifra.
Io riesco ad inserire i numeri a piacere ma non riesco a capire come posso fare capire k la sequenza è terminata premendo invio dopo non aver inserito nulla...
Qualcuno sa dirmi qualcosa???
Grazie in anticipo

11 Risposte

  • Re: Problema classe scanner

    Bene, eccoci qua!

    Allora: qual è precisamente il tuo problema? Capire se una stringa è vuota? Allora puoi fare
    
    if(myString.equals("")) ...
    
    cioè la confronti con la stringa vuota.

    Oppure hai problemi anche con l'utilizzo della classe Scanner?
  • Re: Problema classe scanner

    Di default l'inserimento di numeri con la classe scanner termina non appena clicco invio invece io voglio che il programma termini solo quando non inserisco nessun numero e premo invio. Capito?? O nn riesco a spiegarmi?
  • Re: Problema classe scanner

    Sì sì, ho capito.

    Ti ripeto la risposta di prima anche se in modo diverso: come fai a renderti conto che la stringa inserita è vuota, cioè che è stato premuto Invio senza inserire nulla? Leggi la stringa (metodo nextLine di Scanner) e poi la confronti con "" come ti dicevo: se è vuota allora hai finito, altrimenti significa che è stato inserito un altro numero.
  • Re: Problema classe scanner

    Scusa l'ignoranza, ma se io utilizzo il metodo nextDouble o hasNextDouble cosa c'entra il tipo string ??
  • Re: Problema classe scanner

    sballus ha scritto:


    Scusa l'ignoranza, ma se io utilizzo il metodo nextDouble o hasNextDouble cosa c'entra il tipo string ??
    Eh questo è uno dei problemi tipici della classe Scanner. Se tu leggi un numero con nextInt, nextDouble, ecc. ti resta sempre un carattere "\n" (a capo) nel buffer, e questo può creare problemi.
    Per questo io leggo sempre una stringa con nextLine e poi converto in numero. Esempio:
    
    String myString = scanner.nextLine();
    int myInt = Integer.parseInt(myString);
    
    Oltretutto per il tuo esercizio, questo approccio mi sembra anche piuttosto indicato, perché così puoi fare il confronto con la stringa vuota per capire quando è terminato l'inserimento.
  • Re: Problema classe scanner

    Se ti invio il testo dell'esercizio riesci a scrivermi il codice completo?? Se nn è un disturbo
  • Re: Problema classe scanner

    Per me non è un disturbo, anzi... intanto che aspettavo le tue risposte l'ho già fatto!

    Io te lo posso anche postare, però cerca di capire bene come funziona, perché se ti limiti a fare CTRL-C + CTRL-V non ha alcuna utilità e non impari nulla. D'altra parte se sei alle prime armi è anche vero che bisogna pur partire da qualche esempio...

    Oltretutto io ho buttato lì la prima cosa funzionante che mi sia venuta in mente, ma ci sono cose da migliorare: ad esempio quel ciclo infinito while(1 != 0) lo puoi sostituire con un opportuno do-while. Oppure puoi mettere tutta la fase di lettura dei numeri in un'apposita funzione, ecc.

    Ecco il codice:
    
    import java.io.InputStreamReader;
    import java.util.Scanner;
    
    public class LetturaNumeri {
    
    	public static void main(String[] args) {
    
    		// creo un oggetto Scanner per leggere input da tastiera
    		Scanner sc = new Scanner(new InputStreamReader(System.in));
    
    		String line;
    		int num;
    
    		// ciclo potenzialmente infinito
    		while(1 != 0) {
    			System.out.print("Inserire numero: ");
    
    			// leggo la riga inserita dall'utente
    			line = sc.nextLine();
    
    			// se la riga e' vuota allora smetto di leggere
    			if(line.equals("")) break;
    
    			// altrimenti converto quello che e' stato inserito in un numero
    			// PS. qui ci sarebbe da fare anche qualche altro controllo...
    			num = Integer.parseInt(line);
    
    			// ripeto all'utente il numero che ha appena inserito
    			System.out.println("Hai inserito " + num);
    		}
    
    		System.out.println("Termino");
    		sc.close();
    	}
    
    }
    
  • Re: Problema classe scanner

    Io sto studiando la teoria però voglio implementare anche con esercizi un pò più complicati. X questo ti chiedo il codice completo cosi da usarlo come base x il futuro.

    Il testo dell'esercizio completo è:
    Lettura di una sequenza di numeri inseriti manualmente dall’utente. Dopo aver digitato tutte
    le cifre che compongono il numero che vuole inserire, l’utente dovrà premere invio.
    L’utente può inserire una sequenza lunga a piacere ed il programma dovrà continuare a
    leggere i numeri inseriti dall’utente; per indicare che la sequenza è terminata, l’utente
    premerà invio senza aver inserito alcuna cifra
    · Memorizzazione della lista di numeri in una struttura di tipo LinkedList o in un array
    · Ordinamento della lista mediante l’algoritmo BubbleSort, di cui, per facilitazione, si riporta
    una descrizione in calce
    · Salvataggio della lista ordinata su un file
    · Lettura del file e salvataggio dei dati in una singola stringa
    · Visualizzazione a schermo della stringa appena costruita
    Pseudo-codice dell’algoritmo BubbleSort
    void BubbleSort( numeriDiInput : lista degli elementi da ordinare )
    scambio = true
    while scambio
    scambio = false
    for i = 0 to lunghezza(numeriDiInput)-2
    if numeriDiInput > numeriDiInput[i+1]
    invertiLaPosizione(numeriDiInput, numeriDiInput[i+1] )
    scambio = true
  • Re: Problema classe scanner

    Perfetto: con il codice che ti ho postato prima leggi una serie di numeri e li "ripeti" all'utente senza memorizzarli da nessuna parte.
    Riesci a fare qualche (piccola) modifica a quel codice per fare in modo che i numeri vengano memorizzati in una ArrayList o una LinkedList?
    Poi dopo pensiamo all'ordinamento e alla scrittura su file.
  • Re: Problema classe scanner

    Posso provarci ma x me c vuole tempo(ho perso dei giorni per il problema input e tu in un nanosecondo) x questo preferisco aver la possibilità di lavorarci con calma però avendo la possibilità di confrontare il mio elaborato con il tuo. Quindi se puoi scrivimi l'intero codice ed io mi applicherò... Cmq grazie x tutto
  • Re: Problema classe scanner

    Buonasera ragazzi, sto lavorando sullo stesso testo postato e per quanto riguarda il primo punto, sono riuscito a risolverlo. Il problema riguarda la memorizzazione della lista nell' array visto che la visibilità della variabile costruita nel ciclo rimane dentro quest'ultimo.
    Mi date una mano??
Devi accedere o registrarti per scrivere nel forum
11 risposte