Heim >Java >javaLernprogramm >So lösen Sie das Problem des Lesens von Wagenrückläufen in Scanner.nextLine() in Java
Wenn wir Java zum Lesen von Tastatureingaben verwenden und zuerst eine int-Variable und dann die Zeichenfolge der nächsten Zeile lesen, werden wir feststellen, dass das Ergebnis der Programmausführung nicht den Erwartungen entspricht und das Programm nicht liest die nächste Zeile.
Das passiert in der folgenden Situation:
Scanner sc=new Scanner(System.in); int n=sc.nextInt(); String s=sc.nextLine();
Bei der Codeanalyse besteht unsere Anforderung darin, zuerst eine int-Variable und dann in der nächsten Zeile eine Zeichenfolge einzugeben, das heißt, wenn wir die Tastatur verwenden Zur Eingabe geben wir tatsächlich drei Teile ein:
3
Wörter
sind: Zahl 3, Zeilenumbruchzeichen, Zeichenfolgenwörter.
Aus der Analyse gerade können wir erkennen, dass die Ursache des Problems darin liegt, dass die nextLine()-Methode nicht unsere Zeichenfolge gelesen hat, sondern unser Zeilenumbruchzeichen eingegeben hat. Methode 1 Wird gelesen, wird das Zeilenumbruchzeichen verworfen und die nächste Zeile wird als die Position betrachtet, an der sc2 mit dem Lesen beginnt.
Praktischer KampfDas Folgende ist die erste Frage des schriftlichen Sommerpraktikumstests des Unternehmens Tengxun vom 26. April 2020 für softwarebezogene Positionen:
Eine der Grundlagen der Datenstruktur – WarteschlangeDie Warteschlange verfügt über fünf Grundoperationen , Einfügen am Ende der Warteschlange, Entfernen des Kopfes der Warteschlange, Löschen des Kopfes der Warteschlange, Größe der Warteschlange und Löschen der Warteschlange.
Jetzt können Sie den Betrieb einer Warteschlange simulieren. Bitte beachten Sie die Eingabe für das spezifische Format.
Eingabebeschreibung:
Geben Sie eine Ganzzahl T in die erste Zeile ein, um anzugeben, dass es als nächstes T Sätze von Testdaten geben wird.Für jeden Testdatensatz:
Geben Sie in der ersten Zeile eine Ganzzahl Q ein, um anzugeben, dass Q-Operationen vorhanden sind.In der nächsten Q-Zeile gibt jede Zeile eine Warteschlangenoperationsmethode ein. Das spezifische Format ist wie folgt: Im Anfangszustand ist die Warteschlange leer. Fügen Sie das Ende der Warteschlange ein: PUSH 100
1garantiert, dass es sich bei der Operation um einen der oben genannten 5 Typen handelt. Ausgabebeschreibung:Für jeden Testdatensatz:POPWenn die Operation „Teamleiter entfernen“ lautet, wird das Kopfelement des Teams ausgegeben. Wenn es nicht entfernt werden kann, wird „-1“ ausgegeben.
TOP
Wenn der Vorgang „Löschen des Teamleiters“ lautet, wird „-1“ ausgegeben, wenn der Vorgang nicht möglich ist.
Wenn der Vorgang „Warteschlangengröße“ lautet, wird die Warteschlangengröße ausgegeben.
Für andere Vorgänge ist keine Ausgabe erforderlich.
Beispiel Eingabe
2
7
PUSH 1
PUSH 2TOP
POPPOP5
Meine AC-Antwort:
PUSH 2 , verwenden Sie LinkedList Die oben genannten Operationen können natürlich erreicht werden, die zugrunde liegende Implementierung von Queue ist ursprünglich LinkedList.
Der Grund, warum ich diese Frage aufführe, ist, dass diese Frage das Problem des Lesefehlers von nextLine() verursacht, da wir zuerst die Ganzzahlvariable T lesen müssen und sie dann Zeile für Zeile lesen müssen Das Newline-Problem führt dazu, dass das Programm nicht ordnungsgemäß ausgeführt wird.Scanner sc=new Scanner(System.in); int n=sc.nextInt(); sc.nextLine();//将换行符读掉 String s=sc.nextLine();Im obigen Code ist mir zum ersten Mal das Zeilenumbruchzeichen zwischen q und der folgenden Eingabe mit
Scanner sc1=new Scanner(System.in); int n=sc1.nextInt(); Scanner sc2=new Scanner(System.in); String s=sc2.nextLine();aufgefallen.
Danach, wenn ein Zeilenumbruchzeichen angetroffen wird:import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc =new Scanner(System.in); int t=sc.nextInt(); while(t>0){ int q=sc.nextInt(); List<Integer> n=new LinkedList<>(); for(int i=0;i<=q;i++){//注意!i<=q,这里的‘='就是因为q和第一行输入之间的换行符 String s=sc.nextLine(); if(s.equals("")){//在这道题中,当我读取到换行符时,直接跳过,不做任何操作 continue; } if(s.startsWith("PUSH")){ n.add(Integer.parseInt(s.split(" ")[1])); } else if(s.equals("TOP")){ if(n.size()==0){ System.out.println(-1); } else System.out.println(n.get(0)); } else if(s.equals("POP")){ if(n.isEmpty()){ System.out.println(-1); } else n.remove(0); } else if(s.equals("SIZE")){ System.out.println(n.size()); } else if(s.equals("CLEAR")){ n.clear(); } } t--; } } }
, um das Problem zu lösen.
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem des Lesens von Wagenrückläufen in Scanner.nextLine() in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!