Java笔记:先读取一个整数再读取一个带空格的字符串
问题背景
-
zzulioj1139输出最短字符串
-
题目描述:输入n和n个字符串,输出其中最短的字符串。若长度相同则输出出现较早的那一个。
- 输入
第一行是一个整数n,后面跟着n行,每行包括一个由字母和数字和空格组成的字符串,长度不超过1000。
- 输出
长度最短的字符串,若长度相同则输出出现较早的那一个。
- 样例输入
5 How are you! Happy Good! Hello world! Thinks
- 样例输出
Happy
-
问题代码:
import java.util.Scanner;
/**
* Author: abin
* Date: 2020-09-21
* Description:zzulioj1139
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextLine();
String str[] = new String[n];
int min;
for (int i = 0; i <n ; i++) {
str[i]=in.nextLine();
}
min=str[0].length();
String minS=str[0];
for (int i = 0; i <n ; i++) {
if (min>str[i].length()){
min=str[i].length();
minS=str[i];
}
}
System.out.println(minS);
}
}
这样做无法读取字符串,原因是标记读取方法 nextInt() 读取数字,然后在分隔符处停止,这里的分隔符是行分隔符(回车键),nextLine() 会在读取行分隔符之后结束,然后返回行分隔符之前的字符串,因为行分隔符之前没有字符,所以line是空的。
解决方法
先用字符串读取数字,在用字符串读取我们所要读取的字符,然后再把第一个读取的字符串转换为数字就可以了。
-
修改后的代码
import java.util.Scanner; /** * Author: abin * Date: 2020-09-21 * Description:zzulioj1139 */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s=in.nextLine(); int n=Integer.parseInt(s); /** * 这里这样做的目的是防止读取不到带空格的字符串 */ String str[] = new String[n]; int min; for (int i = 0; i <n ; i++) { str[i]=in.nextLine(); } min=str[0].length(); String minS=""+str[0]; for (int i = 0; i <n ; i++) { if (min>str[i].length()){ min=str[i].length(); minS=""+str[i]; } } System.out.println(minS); } }