Scanner lettura da standard input

di Anonimizzato26488 il
2 risposte
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

  • 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.
  • 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