import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MainT {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str="";
List<String> strs = new ArrayList<>();
for(int i= 0; i<3;i++) {
str = scanner.nextLine();
strs.add(str);
}
System.out.println(strs);
}
}
1 // input
2 // input
[1, , 2]
我想输入三遍。但只有两次有效。我认为scanner.nextLine 会消耗换行符。但是当我使用时System.out.println
,它会工作三次。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MainT {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str="";
List<String> strs = new ArrayList<>();
for(int i= 0; i<3;i++) {
str = scanner.nextLine();
strs.add(str);
System.out.println("String: " + str);
}
System.out.println(strs);
}
}
1 // input
String: 1
2 // input
String: 2
3 // input
String: 3
[1, 2, 3]
我的环境是 mac monterey 12.3.1 intel 芯片。我使用采用 temurin java 11。为什么它通过使用 println 工作不同?
正如该nextLine()
方法的文档所述
将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。[...]
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine()
按回车键对应输入两个字符:换行符(\n)和回车符(\r)。这两个都是行分隔符。当您键入第一个输入然后按 Enter 时,Scanner
返回第一行,停止然后等待第二个输入(您的第二次nextLine()
调用)。但是,由于已经有一个行终止符(前一次读取的第二个行终止符),一旦您输入第二个输入,您的扫描仪会立即在开头停止并返回一个空的String
. 在那之后,同样的事情不断发生,似乎只读取了两个读数中的一个。
您需要做的是nextLine()
在每次读取之间(而不是在每次读取之后)放置一个额外的内容,以摆脱那个“额外的”行终止符。
Scanner scanner = new Scanner(System.in);
String str = "";
List<String> strs = new ArrayList<>();
System.out.println("Enter three numbers: ");
for (int i = 0; i < 3; i++) {
str = scanner.nextLine();
// The last iteration does not need to get rid of that "extra" line terminator
// because there is no following read;
// otherwise you would be forced to input an extra number
if (i < 2) {
scanner.nextLine();
}
strs.add(str);
}
System.out.println(strs);
或者,您可以在每次阅读之前通过打印消息请求输入。这样,Scanner
由于屏幕上写入的文本, 的内部光标将向前移动“额外”行分隔符,并允许您使用单个nextLine()
.
Scanner scanner = new Scanner(System.in);
String str = "";
List<String> strs = new ArrayList<>();
for (int i = 0; i < 3; i++) {
System.out.print("Enter a number: ");
str = scanner.nextLine();
strs.add(str);
}
System.out.println(strs);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句