Errore Scanner

di il
4 risposte

Errore Scanner

Il programma funziona, e in base a nickname, sesso e età dice se i due soggetti inseriti sono affini (compito università). Per la prima persona inserita va tutto bene, ma per la seconda c'è un problema: quando al termine dell'inserimento dell'età della prima persona premo INVIO per terminare l'inserimento succede questo:

INSERISCI LA TUA ETA': 20
Inserisci ora il secondo soggetto:

INSERISCI IL TUO NICKNAME: MASCHIO O FEMMINA? (M/F):

In pratica non posso inserire il nickname... ho pensato fosse un problema che nel buffer della tastiera ci fosse ancora memorizzato l'INVIO, ma ho messo anche il metodo reset e non è cambiato nulla... cosa potrebbe essere? di seguito la classe che contiene il metodo per creare una persona e il main

import java.util.Scanner;




public class Persona {
	
	String nick, sesso;
	int età;
		
	public Persona (String _nick, String _sesso, int _età)
	{	
		nick=_nick;
		sesso=_sesso;
		età=_età;			
	}
	
	public boolean affini(Persona persona2)
	{
		boolean affini=false; //bisogna inizializzarla x forza...
		if((this.età-persona2.età<3)&&(this.sesso!=persona2.sesso)) affini=true;
		if(affini==true) System.out.println("I due soggetti sono affini");
		else System.out.println("Non sono affini!!");
		return affini;
		
	}
	
	public static Persona creaPersona (Scanner lettore)
	{
		String nick, sesso;
		int età;
		
		//Scanner lettore= new Scanner (System.in);
		System.out.print (" INSERISCI IL TUO NICKNAME: ");
		nick=lettore.nextLine();
	    System.out.print (" MASCHIO O FEMMINA? (M/F): ");
		sesso=lettore.nextLine();
		System.out.print (" INSERISCI LA TUA ETA': ");
		età=lettore.nextInt();
		lettore.reset(); //ripulisce il buffer del lettore

		return new Persona (nick, sesso, età);
			
	}

import java.util.*;

public class Main
{
static String Piera, F;
	public static void main(String[] args)
	{
		System.out.println ("Ciao!"); //saluto
		
		Scanner lettore= new Scanner(System.in);
		Persona personaggio1=Persona.creaPersona(lettore); 
		System.out.println ("Inserisci ora il secondo soggetto:\n");
		Persona personaggio2=Persona.creaPersona(lettore); // è questo crea persona che non vaaaa!!!!
		personaggio1.affini(personaggio2);
		
		
	}
			
}
Grazie mille

4 Risposte

  • Re: Errore Scanner

    Ciao, se non ricordo male c'era una specie di bug nello Scanner di java: dopo aver letto un numero non riusciva più a leggere una stringa. Io avevo risolto creando due oggetti Scanner: uno per i numeri e uno per le stringhe.
    Prova e facci sapere.
  • Re: Errore Scanner

    Ciao. Dopo la nextInt() prova a mettere una "next()". Questo perché quando inserisci un numero poi premi INVIO, e quindi lo scanner legge il numero ma lascia il carattere INVIO nel buffer, carattere che viene consumato alla successiva nextLine(). Inserendo invece una next() il carattere viene consumato subito.

    PS: l'operazione "reset()" non svuota il buffer ma ripristina eventuali impostazioni sullo scanner, quali il cambio di delimitatore, o radice..
  • Re: Errore Scanner

    Grazie a tutti e 2! ... avevo capito male l'uso del reset allora...

    Per quanto riguarda l'altro problema, usando un next il problema non sono riuscito a risolverlo perchè l'invio non se lo mangiava e continuava ad aspettare un carattere.
    Creando 2 oggetti Scanner è andato tutto bene invece... ora funziona!!

    Grazie mille ancora
  • Re: Errore Scanner

    Al posto di next() usa nextLine()

    Ciao.
Devi accedere o registrarti per scrivere nel forum
4 risposte