java如何输⼊字符跳出循环,Java中实现以换⾏为结束输⼊的⽅
法
⼀、问题描述
最近在刷题的过程中,发现许多题都是要求以不再输⼊数据作为结束输⼊的标志。
⽐如有⼀题的输⼊要求如下:
输⼊可能有多组数据。每组数据都包括多⾏,第⼀⾏先输⼊个数 N,接下来的 N ⾏再输⼊相应个数的整数。当不再输⼊数据时结束输⼊。
输⼊⽰例:
2
1
2
3
10
4
5
对于上⾯的输⼊,实际是两组数据,每⼀组的⾸个数字代表本组的数据个数。第⼀组的数据为[1, 2],第⼆组数据为 [10, 4, 5]。
⼆、解决⽅案
在 Java 中,我们⼀般都是以特定字符串来结束输⼊,⽐如 “exit”、“q” 等。⽽此类题⽬要求当不再输⼊数据时结束输⼊,也就是说以换⾏(或理解为空字符)结束输⼊。
我们知道,常⽤的输⼊⽅法有:next()、nextLine() 。它们的使⽤说明如下:
next() ⽅法来实现输⼊,其在读取内容时,会过滤掉有效字符前⾯的⽆效字符,对输⼊有效字符之前遇到的空格键、Tab键或 Enter 键等结束符,next() ⽅法会⾃动将其过滤掉。
nextLine() ⽅法字⾯上有扫描⼀整⾏的意思,它的结束符只能是 Enter 键,即 nextLine() ⽅法返回的是 Enter 键之前没有被读取的所有字符,它是可以得到带空格的字符串的。
从上⾯的描述我们可以看出来,理论上是可以通过 nextLine() 来实现换⾏结束输⼊的。
于是⼀开始我是这么写的:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList> list = new ArrayList<>();
ArrayList once;
while (true){
String a = Line();// ⾸先输⼊⼀个数,代表本组数据个数
if (a.isEmpty()){
break;
}
once = new ArrayList<>();
int count = Integer.parseInt(a);
for(int i=0; i
int temp = Int();
once.add(temp);
}
list.add(once);
}
System.out.println(list);
}
然⽽经过实践发现,这种写法⽆法实现多组数据的输⼊,即输⼊完⼀组数据之后,将会⾃动退出循环。
之所以出现这种情况,其根源在于:
nextInt() 不会读取 \n,⽽ nextLine() 读取⼀⾏⽂本,会将 nextInt() ⽅法遗留下来的 \n 字符读⼊,因此会退出循环。知道问题所在,就很好解决了。对于这类问题,我⽬前摸索出了两种⽅法:
⽅法⼀:在 nextInt() 后⾯再加⼀个 nextLine() 来消除 \n 字符。
⽅法⼆:每次使⽤ nextLine() 之前,重新创建⼀个输⼊流对象。
三、代码实现
⽅法⼀: 在 nextInt() 后⾯再加⼀个 nextLine() 来消除 \n 字符。
代码实现如下:
public static void main(String[] args) {
nextint()方法Scanner input = new Scanner(System.in);
ArrayList> list = new ArrayList<>(); // 存放所有数据
ArrayList once;// 存放每组数据
while (true){
String a = Line();// ⾸先输⼊⼀个数,代表本组数据个数
if (a.isEmpty()){// 如果输⼊为空,退出
break;
}
once = new ArrayList<>();
int count = Integer.parseInt(a);
for(int i=0; i
int temp = Int();
once.add(temp);
}
list.add(once);
/* ⽅法⼀:在这⾥附加⼀个 nextLine() ⽅法读取多余的 \n */ Line();
}
System.out.println(list);
}
⽅法⼆: 每次使⽤ nextLine() 之前,重新创建⼀个输⼊流对象。
代码实现如下:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList> list = new ArrayList<>(); // 存放所有数据
ArrayList once;// 存放每组数据
while (true){
String a = Line();// ⾸先输⼊⼀个数,代表本组数据个数if (a.isEmpty()){// 如果输⼊为空,退出
break;
}
once = new ArrayList<>();
int count = Integer.parseInt(a);
for(int i=0; i
int temp = Int();
once.add(temp);
}
list.add(once);
/* ⽅法⼆:需要在这⾥重新 new ⼀个 Scanner */
input = new Scanner(System.in);
}
System.out.println(list);
}
标签:nextLine,Java,ArrayList,以换,new,input,输⼊,once
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论