Java を使用してキーボード入力を読み取る場合、最初に int 変数を読み取り、次に次の行の文字列を読み取ると、プログラムの実行結果が期待どおりではないことがわかります。プログラムは文字列の次の行を読み取られませんでした。
これは次の状況で発生します:
Scanner sc=new Scanner(System.in); int n=sc.nextInt(); String s=sc.nextLine();
コード分析から、最初に int 変数を入力し、次の変数に文字列を入力する必要があります。キーボードを使用して入力するとき、実際には次の 3 つの部分を入力します:
3
words
それは、数字の 3、改行です。文字と文字列の単語。
先ほどの分析からわかるように、問題の原因は、 nextLine() メソッドが文字列を読み取らず、文字列を読み取ったことです。改行文字を入力します。
方法 1
余分な改行文字があるため、文字列を読み取る前に改行文字を読み取ることができます:
Scanner sc=new Scanner(System.in); int n=sc.nextInt(); sc.nextLine();//将换行符读掉 String s=sc.nextLine();
方法2
Scanner オブジェクトを再作成します:
Scanner sc1=new Scanner(System.in); int n=sc1.nextInt(); Scanner sc2=new Scanner(System.in); String s=sc2.nextLine();
このように、n が読み取られた後、改行文字は破棄され、次の行が先頭とみなされます。 sc2の場所。
以下は、2020 年 4 月 26 日に行われた tengxun company の夏季ソフトウェア関連職インターンシップ筆記試験の最初の質問です:
基本の 1 つデータ構造の - キュー
キューには、キューの末尾の挿入、キューの先頭の削除、キューの先頭の削除、キューのサイズ、キューのクリアという 5 つの基本操作があります。
キューの操作をシミュレートできるようになりました。特定の形式については入力を参照してください。
入力説明:
テスト データの各セットについて:最初の行に整数 T を入力します。これは、次に T セットのテスト データがあることを示します。
テスト データの各セットについて:
最初の行に整数 Q を入力し、Q 操作があることを示します。
次の Q 行、各行はキュー操作メソッドに入ります。具体的な形式は次のとおりです。
初期状態では、キューは空です。
キューの末尾を挿入: PUSH キューをクリア: CLEAR
11 動作は上記5種類のいずれかであることが保証されています。
出力の説明:
操作が「チームの先頭を削除する」場合、先頭要素を出力します。チーム、取り出せない場合は「-1」を出力
操作が「キューヘッド削除」の場合、削除できない場合は「-1」を出力操作が「キューサイズ」の場合、キューのサイズを出力します2他の操作を出力する必要はありません
入力例
7
PUSH 1PUSH 21TOP
POP
TOP
POP
POP
5
プッシュ 1
プッシュ 2
サイズ
POP
サイズ
結果:
2
-121
これもちろん、Queue の基礎となる実装は LinkedList です。
質問の答え
私の AC の答え:
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--; } } }
上記のコードで、私はまず、q と次の
for(int i=0;i<=q;i++)
を使用した入力の間にある改行文字に気づきました。
その後、改行文字が見つかった場合:
String s=sc.nextLine(); if(s.equals("")) continue;
で問題は解決します。
以上がJavaのScanner.nextLine()でキャリッジリターンを読み取る問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。