[Java] prompt dei comandi bloccato
Buon anno nuovo a tutti!
qualcuno mi spiega perchè eseguendo questo codice il prompt dei comandi si blocca? cioè il "cursore" bianco del prompt è lampeggiante come fosse tutto regolare, ma non mi fa scrivere nulla
L'obiettivo è continuare a inserire stringhe nel vettore finché non c'è la chiusura dello standard input
Invece la parte utilizzata della classe MyStringVector è quanto segue
qualcuno mi spiega perchè eseguendo questo codice il prompt dei comandi si blocca? cioè il "cursore" bianco del prompt è lampeggiante come fosse tutto regolare, ma non mi fa scrivere nulla
L'obiettivo è continuare a inserire stringhe nel vettore finché non c'è la chiusura dello standard input
import java.util.Scanner; public class a { public static void main(String[] args) { Scanner input = new Scanner(System.in); MyStringVector vector = new MyStringVector(); System.out.println("Inserire il testo per righe:"); while(input.hasNextLine()); { vector.add(input.nextLine()); } System.out.print("fine ciclo"); } }
Invece la parte utilizzata della classe MyStringVector è quanto segue
public class MyStringVector { //VARIABILI DI ESEMPLARE private int vSize; private String[] vector; //COSTRUTTORI public MyStringVector() { vSize = 0; vector = new String[10]; for(int i=0; i < 10; i++) vector[i]=null; } //METODI public int size() { return vSize; } public String[] resize() { String[] newVector = new String[vector.length*2]; System.arraycopy(vector, 0, newVector, 0, vSize); for(int i=vSize; i<newVector.length; i++) newVector[i] = null; vector = newVector; return vector; } public void add(String s) { if(s!=null) { if(vSize == vector.length) this.resize(); vector[vSize++] = s; } } }
Risposte
Perché devi segnalare in qualche modo al programma che è finito l'input, premendo CTRL-z, se usi Windows, oppure CTRL-d se usi Linux et similia.
a quanto avevo capito io hasNextLine() blocca il programma per chiedere l'input, ma non lo consuma, perciò dal momento che inserisco qualcosa di diverso da ctrl+Z ciò che ho inserito dovrebbe essere preso da input.nextLine() nel corpo del while, e la cosa ripetersi nuovamente finché non inserisco ctrl+Z che dovrebbe bloccare tutto, invece il programma mi fa inserire una riga, premo invio e poi più nulla... cosa ho sbagliato?