中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java之Scanner.nextLine()讀取回車的問題如何解決

發布時間:2023-04-03 15:55:26 來源:億速云 閱讀:253 作者:iii 欄目:開發技術

本篇內容介紹了“Java之Scanner.nextLine()讀取回車的問題如何解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

問題描述

我們在使用java讀取鍵盤輸入時,如果先讀取一個int變量,再讀取下一行的字符串時,會發現程序運行結果與預期不符,程序并沒有讀取到下一行的字符串。

即發生在如下情形:

Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String s=sc.nextLine();

問題分析

從代碼分析我們的需求是先輸入一個int變量,再在下一行輸入一個字符串,也就是說我們使用鍵盤輸入的時候,其實輸入了三部分:

3
words

分別是:數字3,換行符,字符串words。

如何處理多出來的換行符

從剛才的分析可以看到,問題的原因是nextLine()方法沒有讀取到我們的字符串,而是讀入了我們的Enter換行符。

方法一

既然多出了一個換行符,那我們可以在讀取字符串之前將換行符讀掉:

Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();//將換行符讀掉
String s=sc.nextLine();

方法二

重新創建Scanner對象:

Scanner sc1=new Scanner(System.in);
int n=sc1.nextInt();
Scanner sc2=new Scanner(System.in);
String s=sc2.nextLine();

這樣在讀取完n之后,換行符會被丟棄,下一行被視作sc2開始讀入的位置。

實戰

下面是tengxun公司2020年4月26日暑期軟件相關崗位實習筆試的第一題:

數據結構基礎之一一隊列

隊列有五種基本操作,插入隊尾、取出隊首、刪除隊首、隊列大小、清空隊列。

現在讓你模擬一個隊列的操作,具體格式參考輸入。

輸入描述:

第一行輸入一個整數T,表示接下來有T組測試數據。
對于每組測試數據:
第一行輸入一個整數Q,表示有Q次操作。
接下來Q行,每行輸入一種隊列操作方式,具體格式如下:
初始狀態下隊列為空。
插入隊尾: PUSH X
取出隊首: TOP//僅僅是看一下隊首元素,不要把隊首元素刪除
刪除隊首: POP
隊列大小: SIZE
清空隊列: CLEAR
1<T<100
1<Q,X&le;1000
保證操作為以上5種的任意一種。

輸出描述:

對于每組測試數據:
如果操作為“取出隊首”,輸出隊首元素,如果無法取出,輸出“-1”
如果操作為“刪除隊首”,如果無法刪除,輸出“-1”
如果操作為“隊列大小”,輸出隊列大小
其他操作無需輸出

示例輸入

2
7
PUSH 1
PUSH 2
TOP
POP
TOP
POP
POP
5
PUSH 1
PUSH 2
SIZE
POP
SIZE

結果:

1
2
-1
2
1

問題解答

這道題并不難,使用LinkedList就可以實現上述操作,當然,Queue的底層實現本來也就是LinkedList。

之所以列舉這道題是因為這道題會出現nextLine()讀取失敗的問題,因為我們首先要讀取整形變量T,之后再往后逐行讀取,如果不處理換行符的問題,將導致程序運行出現異常。

我的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--;
        }
    }
}

在上面的代碼中,我首先使用了

for(int i=0;i<=q;i++)

注意到了q與接下來的輸入之間的換行符。

之后,當遇到換行符時:

String s=sc.nextLine();
if(s.equals(""))
    continue;

來解決該問題。

“Java之Scanner.nextLine()讀取回車的問題如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

左权县| 馆陶县| 福建省| 纳雍县| 微博| 富阳市| 依安县| 林甸县| 武川县| 平山县| 武功县| 荥阳市| 启东市| 万宁市| 行唐县| 十堰市| 临洮县| 南靖县| 乌鲁木齐市| 若尔盖县| 阿巴嘎旗| 广丰县| 平度市| 雷州市| 宁乡县| 平塘县| 潢川县| 武城县| 于都县| 泰安市| 新沂市| 青冈县| 丰原市| 西乡县| 临桂县| 盖州市| 临城县| 邹平县| 永寿县| 黄浦区| 万载县|