1. 程式人生 > >Java中Scanner類 nextInt()之後nextLine()無法讀取輸入

Java中Scanner類 nextInt()之後nextLine()無法讀取輸入

所遇到的問題:昨天寫一個演算法題需要輸入一個數字,然後輸入對應數字個數的字串。
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String[] strArr = new String[n];
for (int i = 0; i < n; i++) {
    strArr[i] = scanner.nextLine();
}
如此使用,發現會出錯

原因是想當然的使用了nextLine()來讀取

改進方式:使用next()

Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String[] strArr = new String[n];
for (int i = 0; i < n; i++) {
    strArr[i] = scanner.next();
}

或者 全部使用nextLine()

Scanner scanner = new Scanner(System.in);
String StrN = scanner.nextLine();
int n = Integer.parseInt(StrN);
String[] strArr = new String[n];
for (int i = 0; i < n; i++) {
    strArr[i] = scanner.nextLine();
}

原因:

首先,Scanner是一個掃描器,它掃描資料都是去記憶體中一塊緩衝區中進行掃描並讀入資料的,而我們在控制檯中輸入的資料也都是被先存入緩衝區中等待掃描器的掃描讀取。這個掃描器在掃描過程中判斷停止的依據就是“空白符”,空格啊,回車啊什麼的都算做是空白符。nextInt()方法在掃描到空白符的時候會把前面的資料讀取走,但會丟下空白符 "\r"在緩衝區中,類似空格、換行都算空白符,但是nextLine()會繼續讀取本行的空白符。

Java中Scanner類 nextInt()與nextLine()與next()的區別

nextInt()會讀取一個int型別的整數,但是會把空白符留下,也就是說焦點不會移動到下一行,仍在這一行。nextLine() 會讀取該行剩餘的所有內容,包括換行符,然後把焦點移動到下一行的開頭。next()是以換行或者空白符為界線接收下一個String型別變數。 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x = scanner.nextInt(); String str = scanner.nextLine(); System.out.println("nextInt()整數:" + x); System.out.println("nextLine()字串:" + str); String s = scanner.next(); System.out.println("next()字串:" + s); scanner.close(); }12
nextInt()整數:12nextLine()字串:12next()字串:12由此可見 nextLine()接收的是第一個12後面的換行符。

相關推薦

JavaScanner nextInt()之後nextLine()無法讀取輸入

所遇到的問題:昨天寫一個演算法題需要輸入一個數字,然後輸入對應數字個數的字串。Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); String[] strArr = new String[n

javaScannernextInt之後nextLine無法讀取輸入

Scanner是一個掃描器,它掃描資料都是去記憶體中一塊緩衝區中進行掃描並讀入資料的,而我們在控制檯中輸入的資料也都是被先存入緩衝區中等待掃描器的掃描讀取。這個掃描器在掃描過程中判斷停止的依據就是“空白符”,空格啊,回車啊什麼的都算做是空白符。 nextInt()方法在掃描

javaScannernextLine()和next()的區別和使用方法

        在實現字元視窗的輸入時,很多人更喜歡選擇使用掃描器Scanner,它操作起來比較簡單。在程式設計的過程中,我發現用Scanner實現字串的輸入有兩種方法,一種是next(),一種n

javaScanner的close()方法的作用

import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input=new Scanner(System.in);System.out.print

JavaScannernext()方法與nextLine()方法的區別

在學習Java過程中,一次偶然機會,發現在Scanner類中,有兩種接收控制檯輸入字串的方法:next()和nextLine(),那麼兩者有什麼不同之處呢?下面是我自己的一些總結。 一、JDK API文件中對這兩種方法的定義:      public String next

Javaint型強轉為byte型,強轉為byte之後,數據超出byte的表述範圍是如何計算的?

ava -128 div string blog pub 二進制 就是 轉換 public class Aa { public static void main(String[] args) { byte i = 88; byte r = 68; byte f = (

Object,scanner,String,StringBuffer,Java基本型的包裝型等

Object類scanner Scanner類 String和StringBuffer java中基本類型的包裝類型 math類的幾個常用方法 一、Scanner類 Scanner類:簡單文本掃描器1、鍵盤錄入步驟:(1)需要創建鍵盤錄入對象:Scanner 鍵盤錄入對象=new Scan

javascanner裡的NextLine()方法讀取資料為空並且為讓從鍵盤輸入

今天我寫了一個程式碼,是用switch來實現的計算器,但是在讓輸入字元的時候,用的是nextLine()方法,可是走到這個方法的時候,並沒有讓我輸入,而是自己輸入了一個"",也就是空字串。package com.baidu.switch1; import java.util

javaScanner和Integer.paseInt(sc.nextLine())轉換

用Scanner先獲取一個int值,再獲取一個字串就出現了問題。 解決辦法: 1. 再建立一個鍵盤錄入物件,再獲取字串。 2. 把所有的資料都以字串的形式錄入,然後使用什麼,轉換成什麼形式。

javaString型轉換為yyyy-MM-dd的Date

col code edate birt mat led div get sys String birthday ="2017-02-22"; SimpleDateFormat sdf = new SimpleDateFormat(("yyyy-MM-dd")); jav

javaclob型的值處理

string類型 reat 測試 () eat string json pri 類型轉換 1、String類轉換Clob類型 private Clob clobStr; private String Str="測試值"; clobStr = Hibernate.create

Java集合容器初步了解

equals treemap 輸入 strong 字符串數組 通過 system 結構 shm   容器(Collection)     數組是一種容器,集合也是一種容器     java編程中, 裝其他各種各樣的對象(引用類型)的一種東西, 叫容器     (圖書

javaString為什麽要設計成final?

tro cli lai 這一 引用 沒有 num 重新 static 大神鏈接:在java中String類為什麽要設計成final? - 程序員 - 知乎 我進行了重新排版,並且更換了其中的一個例子,讓我們更好理解。 String很多實用的特性,比如說“不可變性”,是工

javaSet接口的用法

集合類型 aaa sys nbsp all spa 元素 equal stub 在Java中使用Set,可以方便地將需要的類型,以集合類型保存在一個變量中.主要應用在顯示列表. Set是一個不包含重復元素的collection。更確切地講,set 不包含滿足 e1.equa

Java抽象和接口的區別

pre data 區分 信息 展示 關於 面向 得出 lose 在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向對象能力。abstract class和interfac

javaRandomAccessFile的作用:對指定文件可以進行讀寫的操作

cnblogs 讀寫 acc com ces 作用 分享 進行 .com 在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作

javaFilegetPath()、getAbsolutePath()、getCanonicalPath()區別?

mil dir block user out div cnblogs test file 簡單看一下描述,例子最重要。 1、getPath():   返回定義時的路徑,(就是你寫什麽路徑,他就返回什麽路徑) 2、getAbsolutePath():   返回絕對路徑,但不會

java與對象

共享 泛化 不能 變量聲明 eas diag 特征 類變量 set 面向對象編程主要有三個特征:封裝、繼承和多態。 封裝 一個簡單的問題 一個能輸出圓的面積的Java應用程序。 public class ComputerCircleArea

java型轉換關系

類型轉換 println clas main 默認 sys 1.2 rgs print public class A3{ public static void main(String[] args){ int i1=123; int i2=456; double d1=(i

javaString常用方法、屬性等

col clas equal ack length ++ ava eal rgs package Head18; public class java09 { public static void main(String[] args) { St