溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

scanner.nextInt()、next()和scanner.nextIine()連用要注意哪些事項

發(fā)布時間:2023-04-03 11:17:08 來源:億速云 閱讀:114 作者:iii 欄目:開發(fā)技術

這篇“scanner.nextInt()、next()和scanner.nextIine()連用要注意哪些事項”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“scanner.nextInt()、next()和scanner.nextIine()連用要注意哪些事項”文章吧。

    scanner.nextInt()等next()和scanner.nextIine()連用注意事項

    背景:需求是輸入二維矩陣行列數和矩陣的內容。

    我想要的效果是這樣的,用兩個int記錄第一行輸入行列數,剩下用string記錄用戶輸入的二維矩陣內容。

    實操出現(xiàn)問題

    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
    	while(scanner.hasNext()) {
    		int x = scanner.nextInt();
    		int y = scanner.nextInt();
    		if (x==0&&y==0) {
    			scanner.close();
    			break;
    		}
    		//scanner.nextLine();
    		String a = "";
    		for (int i = 0; i < x; i++) {
    			a +=scanner.nextLine();
    		}
    		for (int i = 0; i < a.length(); i++) {
    			if (i%y == 0) {
    				System.out.println();
    			}
    			System.out.print(a.charAt(i));
    			
    		}
    		
    		}
    }

    輸入卻出現(xiàn)了問題,本想輸入4行4列,卻只接收了3行數據,就開始打印了

    如圖:

    scanner.nextInt()、next()和scanner.nextIine()連用要注意哪些事項

    原因

    這就涉及到next()與nextline()方法區(qū)別的。

    • nextInt()的API寫到 “將輸入信息的下一個標記掃描為一個 int”;

    • nextline()是“此掃描器執(zhí)行當前行,并返回跳過的輸入信息。 此方法返回當前行的其余部分,不包括結尾處的行分隔符。當前位置移至下一行的行首。 因為此方法會繼續(xù)在輸入信息中查找行分隔符,所以如果沒有行

    分隔符,它可能會緩沖所有輸入信息,并查找要跳過的行?!?/p>

    (假設還是以上輸入)所以上面的代碼分析是這樣的:

    /*用戶輸入:
     
      4空格4\n  	//遇到空格結束 x=4, 第二nextInt()遇到換行了結束它的掃描 y=4;
      			但是此行還沒有結束,nextLine會繼續(xù)掃描剩余部分直到換行,光標才會進入下一行
      			只不過剩余的是空字符串,記第一次nextLine()為a1,a1=""
      ****\n  	//a2 = "****",a2記第二次nextLine()
      ....\n  	//a3= "...."
      ....\n	//a4= "...."	
      ****\n	//此刻此行沒有對應的nextline(),也就無法輸入了,接下就執(zhí)行打印輸出了。
      
      */

    解決

    在nextInt()與想接收數據nextline()之間再添加一行scanner.nextLine();用于緩沖換行符,換入新的一行。

    int x = scanner.nextInt();
    		int y = scanner.nextInt();
    		if (x==0&&y==0) {
    			scanner.close();
    			break;
    		}
    		scanner.nextLine();//用于緩沖換行符,換入新的一行。
    		String a = "";
    		for (int i = 0; i < x; i++) {
    			a +=scanner.nextLine();
    		}

    Scanner類: next() 與 nextLine()與nextInt()

    next()、nextLine()、nextInt()是scanner內置的方法。

    next()

    1、一定要讀取到有效字符后才可以結束輸入。

    2、對輸入有效字符之前遇到的空白,next() 方法會自動將其去掉。

    3、只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結束符。

    next() 不能得到帶有空格的字符串。

    Scanner scan = new Scanner(System.in);
            System.out.print("請輸入:");
            String year = scan.next();
            System.out.printf("%s",year);

    輸入:this is a test

    輸出:this

    nextInt()

    使用nextInt()方法時,與next()方法類似,只是它的返回值是int類型的,依舊將空格看作是兩個輸入的數據的間隔

    (當使用nexInt()方法時,只能輸入int類型的數據。)

    nextLine()

    1、以Enter為結束符,也就是說 nextLine()方法返回的是輸入回車之前的所有字符。

    2、可以獲得空白。

    Scanner scan = new Scanner(System.in);
    System.out.print("請輸入:");
    String year = scan.nextln();
    System.out.printf("%s",year);

    輸入:this is a test

    輸出:this is a test

    useDelimiter( )方法

    用Scanner.useDelimiter( )方法,可以將分隔符號修改為"回車",或者其他字符。

    //useDelimiter("\n"); //“\n”換行符(回車)作為輸入的分隔符
    Scanner scan = new Scanner(System.in).useDelimiter("\n");
    System.out.print("請輸入:");
    String year = scan.next();
    System.out.printf("%s",year);

    輸入:this is a test

    輸出:this is a test

    注意:

    使用nextLine()方法時,不將空格看做是兩個字符串的間隔,而是看作字符串的一部分,返回時,它作為String類型一并返回

    使用next()方法時,將空格看作是兩個字符串的間隔

    使用nextInt()方法時,與next()方法類似,只是它的返回值是int類型的,依舊將空格看作是兩個輸入的數據的間隔(當使用nexInt()方法時,只能輸入int類型的數據。)

    以上就是關于“scanner.nextInt()、next()和scanner.nextIine()連用要注意哪些事項”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI