Scanner lettura da standard input

di il
2 risposte

Scanner lettura da standard input

Ho un problema a leggere un testo cosi formato:

3 4 8
A : B
D : E
F : S
Io ho scritto questo codice, ma dove sbaglio?

Scanner myScan = new Scanner(System.in);
Primo = myScan.nextInt();
Secondo = myScan.nextInt();
Terzo = myScan.nextInt();

while (myScan.hasNextLine()) {
			if (count <= Primo) { 
				String[] temp = myScan.nextLine().split(" : ");
				if (temp.length > 1) {
					lista.add(new Doppia(temp[0], temp[1]));
	                       }
	                          

2 Risposte

  • Re: Scanner lettura da standard input

    Mistergsk ha scritto:


    Io ho scritto questo codice, ma dove sbaglio?
    Posta più codice, quello che hai mostrato non è di per sé palesemente errato. C'è in effetti un piccolo inconveniente ma grazie al temp.length > 1 non dovrebbe darti problemi.
    La questione è che al fondo di ogni linea c'è un "newline" e l'ultimo nextInt() che fai sulla prima linea, NON "consuma" questo newline. Quindi il primo nextLine() che fai ti dà una stringa "vuota", perché prende il newline come una riga vuota. Lo split dà 1 solo elemento e tu lo scarti con quel if.
  • Re: Scanner lettura da standard input

    Potresti risolvere così
       	    Scanner myScan = new Scanner(System.in);
                String[] temp = myScan.nextLine().split(" ");
                int Primo = temp.length > 0 ? Integer.valueOf(temp[0]) : 0;
                int Secondo = temp.length > 1 ? Integer.valueOf(temp[1]) : 0;
                int Terzo = temp.length > 2 ? Integer.valueOf(temp[2]) : 0;                      
                for(int count = 0; count < Primo; count++){
                    String s = myScan.nextLine();
                    if(s.length() > 0){
                        temp = s.split(" : ");
                        if (temp.length > 1) 
                            lista.add(new Doppia(temp[0], temp[1]));
                    }     
                }
Devi accedere o registrarti per scrivere nel forum
2 risposte