Java編程中獲取鍵盤輸入實現方法及註意事項 1. 鍵盤輸入一個數組 package com.wen201807.sort; import java.util.Scanner; public class Main { public static void main(String[] args) { ...
Java編程中獲取鍵盤輸入實現方法及註意事項 1. 鍵盤輸入一個數組
package com.wen201807.sort; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()) { int len = sc.nextInt(); int[] array = new int[len]; for(int i = 0; i < len; i++) { array[i] = sc.nextInt(); } display(array); } } public static void display(int[] array) { for(int i = 0; i < array.length - 1; i++) { System.out.print(array[i] + " "); } System.out.println(array[array.length - 1]); } }2. 鍵盤輸入含有逗號的坐標
package Java; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()) { int len = sc.nextInt(); //sc.nextLine(); int[] x = new int[len]; int[] y = new int[len]; for(int i = 0; i < len; i++) { String str = sc.next().trim(); //trim()函數去掉字元串首尾的空格 //sc.nextLine(); String[] strs = str.split(","); //將坐標分開裝入數組 x[i] = Integer.parseInt(strs[0]); y[i] = Integer.parseInt(strs[1]); } for(int i = 0; i < len; i++) { System.out.print(x[i] + " "); System.out.println(); } for(int i = 0; i < len; i++) { System.out.print(y[i] + " "); System.out.println(); } } } }註意: (1) Scanner類中next()與nextLine()都可以實現字元串String的獲取。 next() 方法遇見第一個有效字元(非空格,非換行符)時,開始掃描,當遇見第一個分隔符或結束符(空格或換行符)時,結束掃描,獲取掃描到的內容,即獲得第一個掃描到的不含空格、換行符的單個字元串。 使用nextLine()時,則可以掃描到一行內容並作為一個字元串而被獲取到。它的結束符只能是Enter鍵,即nextLine()方法返回的是Enter鍵之前沒有被讀取的所有字元,它是可以得到帶空格的字元串的。 (2)當上述程式這樣寫的時候會報如下的錯誤: 錯誤如圖: 原因: 這裡nextline()讀到空的換行符作為輸入怎麼讀到換行符呢?在nextLine()中讀取了第一行,但nextInt()只讀取了輸入的整型數字卻沒有讀取換行符,下一個nextLine()會讀取換行符,因此出現了錯誤,類型不匹配。 處理方法: 方法一:在for迴圈內最後加上sc.nextLine();用來讀取nextInt()沒有讀取的換行符 方法二:把String str = sc.nextLine();改為String str = sc.next(); (3)為什麼要加sc.nextLine()這一條語句 對於為什麼要加sc.nextLine()這一條語句,因為出現了下麵的問題: 1.沒有sc.nextLine()的話,程式在debug模式下運行,發現直接先跳過第一次的str = sc.nextLine();這條語句,以str = 空形式傳遞了值,因此,後面相當於做了一次空操作,輸出了一個空行,問題在哪呢? 2.通過查閱資料,當next()、nextInt()、nextDouble()等等這些之後,你如果不再加一條sc.nextLine()的話,下麵如果用到了類似str = sc.nextLine(); 這條語句的話,會首先讀取上面next()、nextInt()、nextDouble()等等這些語句的回車作為一條預設的(為什麼是這樣的機制呢?還需要繼續探索),因此,解決的辦法看下麵第3點:3.就是在輸入 next()、nextInt()、nextDouble()等等這些 之後,再用一個sc.nextLine()這個來截取上面的一個回車操作,後面的nextLine()在第一次才能起作用。 參考博客:https://blog.csdn.net/claram/article/details/52057562