Ich muss eine Methode schreiben, um die vom Benutzer eingegebenen Fahrzeugspezifikationen abzurufen und sie einer Array-Liste hinzuzufügen. Dies muss eine beliebige Anzahl von Spezifikationen akzeptieren, die der Benutzer eingeben möchte, einschließlich keiner. Dies ist mein erster Beitrag hier, bitte entschuldigen Sie die schlechte Grammatik.
public static arraylist gettrim() { scanner t = new scanner(system.in); system.out.println("enter car trim"); arraylist<string> trim = new arraylist<>(); while (t.hasnext()) { trim.add(t.next()); } return trim; }
Ich denke, diese Bedingung wird „false“ zurückgeben, wenn ein Leerzeichen eingegeben wird. Eine solche kontinuierliche Iteration kann nur manuell beendet werden.
Ich habe es auch versucht
if (t.hasNext()) { trim.add(t.next()); } else { t.close(); }
Dies wird einmal wiederholt und gibt die Arrayliste zurück, aber ich muss in der Lage sein, mehr einzugeben. Das Ändern der if- oder while-Bedingung in hasnextline() führt zum gleichen Ergebnis. Hier verwende ich hasnext(), da die Ausstattungsvariante des Autos bestimmte Formatierungserwartungen hat. Ich verstehe nicht, warum hasnext() nicht false zurückgibt, wenn keine Eingabe erfolgt.
Es..Nein.
Denken Sie darüber nach. Wie unterscheidet ein Computer zwischen einem Benutzer, der darüber nachdenkt, was er eingeben soll, und damit möglicherweise bis nach dem Mittagessen wartet, und einem Benutzer, der „fertig“ ist? Starten Sie Ihre Webcam und führen Sie eine KI-Analyse durch, um zu sehen, ob der Benutzer so aussieht, als ob er mit der Eingabe fertig wäre.
Keine Tastatursystem.in
. Es ist die „Standardeingabe des JVM-Prozesses“, Standard, und wenn Sie Ihre Java-Anwendung über die Befehlszeile starten, stellen Sie sie zumindest so ein, dass sie von der Tastatur liest. Es muss nicht sein:
java -jar myapp.jar </some/path/to/some/file.txt
java -jar myapp.jar </dev/barcodescanner1
system.in
Jetzt empfängt die Java-Anwendung vermutlich jedes Mal, wenn Sie einen Barcode scannen, den Barcode genau so, als ob Sie die Ziffern des Barcodes eingegeben und die Eingabetaste gedrückt hätten 1. Es hängt von der „Quelle dieser Eingabe“ bis zum „Ende“ ab. Die Datei endet, wenn das Ende der Datei erreicht ist.
Die Tastatur kann nicht „über“ sein – also, . .hasnext()
不可能返回 false
Leer
Dann verstehst du es nicht
. Sie befinden sich in guter Gesellschaft; das wird wahrscheinlich am meisten missverstanden. Wenn wir uns die Anzahl der Fragen ansehen, die den Stackoverflow überschwemmen, ist dies tatsächlich der Fall.
scanner
mit der Tastatur scanner
zu tun.
Der Scanner nimmt einfach jede Texteingabequelle und teilt sie in Abschnitte auf. Blöcke werden „Tokens“ genannt und „Tokens“ werden durch „den gesamten Text zwischen Trennzeichen“ definiert. Trennzeichen werden wiederum durch reguläre Ausdrücke definiert, der standardmäßig verwendete reguläre Ausdruck ist
s+
Deshalb:
public static void main(string[] args) { scanner s = new scanner(system.in); while (true) { system.out.println("token: ≥" + s.next()) + "≤"); } }
Wenn Sie diesen Befehl ausführen und Folgendes in die Befehlszeile eingeben:
, wird Folgendes angezeigt:
token: ≥hello≤ token: ≥world!≤ token: ≥my≤ token: ≥name≤ token: ≥is≤ token: ≥lajos≤
hello world!
,然后按 enter 键,并输入 my name is lajos
Hinweise zum Scanner: Es ist nicht möglich , den Inhalt von irgendetwas unter dem „Trennzeichen“ zu registrieren oder anderweitig zu erhalten. Man kann den Scanner nicht fragen: Wie viele Rohlinge sind da? Sie können auch nicht fragen: „Stoppen“, wenn Sie auf ein Leerzeichen stoßen. Nein, Leerzeichen trennen nur einen Token vom nächsten. Bei einem Scanner gibt es
keinen Unterschiedzwischen dem Drücken der Eingabetaste und dem Drücken der Leertaste und dann der Eingabetaste. Dies sind alles „1 oder mehrere Leerzeichen“, die austauschbar sind und nicht erkannt werden können, da es sich um Trennzeichen handelt. Möglicherweise möchten Sie überhaupt keinen Scanner verwenden. system.an sich kann es sicherlich differenzieren.
Lösung 1
static void main(string[] args) throws exception { var s = new scanner(system.in); system.out.println("welcome to the fruit stand! enter the fruit you'd like to buy, one at a time:"); var basket = new arraylist<string>(); while (true) { system.out.print("fruit (type 'done' when done): "); string fruit = s.next(); if (fruit.equalsignorecase("done")) break; basket.add(fruit); } system.out.println("here's your basket: " + basket); }
Lösung 2
nextline
, das mit allen anderen verfügbaren Methoden interagiert – wählen Sie eine und nur eine (nextline
, oder außer < Everything außer code>nextline): nextline
,它与它拥有的所有其他方法的交互非常 - 选择一个且仅一个(nextline
,或除 nextline
static void main(string[] args) throws exception { var s = new scanner(system.in); system.out.println("welcome to the fruit stand! enter the fruit you'd like to buy, one at a time:"); var basket = new arraylist<string>(); while (true) { system.out.print("fruit (enter when done): "); string fruit = s.nextline(); if (fruit.isempty()) break; basket.add(fruit); } system.out.println("here's your basket: " + basket); }
nicht vorhanden ist / und nicht in einen solchen Prozess eingespeist werden kann. Aber zum Beispiel funktioniert es. /dev
public static ArrayList getTrim() { Scanner t = new Scanner(System.in); System.out.println("Enter car trim"); ArrayList<String> trim = new ArrayList<>(); while (t.hasNext()) { if (!t.next().trim().equals("") { trim.add(t.next()); } else { t.close(); } } return trim; }
Das obige ist der detaillierte Inhalt vonEndlose Schleife für vom Benutzer gefüllte Array-Liste. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!