簡體   English   中英

將掃描儀與字符串拆分器一起使用

[英]Using a Scanner with a String Splitter

我正在嘗試使用字符串拆分器來顯示用戶輸入,例如要在控制台上顯示的1,2坐標。 運行代碼時沒有任何錯誤。 但是,我嘗試使用分離器似乎無效。

Scanner scanner = new Scanner(System.in);
System.out.println("Enter a row and column number at which to shoot (e.g., 2,3): ");
String[] coordinates = scanner.nextLine().split(",");
if (coordinates.length != 2) {
    System.out.println("Please enter coordinates in the correct format.");
    System.out.println("\nPlayer 1 Please take your turn:");
    continue;
}

System.out.println("\nEnter Mine location:");

System.out.println("\nPlease Enter x position for your Mine:");
System.in.read(byt);
str = new String(byt);
row = Integer.parseInt(str.trim()); 

System.out.println("\nPlease Enter y position for your Mine:");
System.in.read(byt);
str = new String(byt);
col = Integer.parseInt(str.trim());

您對System.in.read(...)是危險的代碼,並且沒有執行您認為正在做的事情:

System.in.read(byt); // *****
str = new String(byt);
row = Integer.parseInt(str.trim()); 

取而代之的是使用Scanner( 已經擁有的東西 getNextInt() ,然后在Scanner上調用getNextInt()或獲取該行並對其進行解析。

另外,您永遠不要使用坐標數組中保存的字符串-如果忽略它們,為什么要獲取字符串?


您詢問:

Scanner scanner = new Scanner(System.in); 
System.out.println("Enter a row and column number at which to shoot (e.g., 2,3): "); 
str = scanner.nextInt().split(","); 

但是然后看到編譯器不允許這樣做,因為您試圖在scanner.nextInt()返回的int原語上調用方法。

我建議使用Scanner#nextInt()來代替您對System.in.read(...)濫用。 相反,如果您希望用戶在一行上輸入兩個數字,並用逗號隔開,那么最好是使用String.split(",") ,不過,我認為使用String.split("\\\\s*,\\\\s*")可能更好String.split("\\\\s*,\\\\s*")擺脫任何空白,例如周圍閑逛。 這樣,拆分應該適用於1,1以及1, 21 , 2然后您可以通過Integer.parseInt(...)解析數組中保存的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM