package excise2;
import java.util.*;
public class TestExe1 {
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
String []str=new String[num];
for(int i=0;i<num;i++)
{
str[i]=sc.nextLine();
}
Arrays.sort(str);
for(int i=0;i<num;i++)
{
System.out.println(str[i]);
}
}
}
,当next()、nextInt()、nextDouble()等等这些之后,你如果不再加一条in.nextLine()的话,下面如果用到了类似str = in.nextLine(); 这条语句的话,会首先读取上面next()、nextInt()、nextDouble()等等这些语句的回车作为一条默认的数据
解决方法:
输入
next()、nextInt()、nextDouble()等等这些 之后,再用一个in.nextLine()这个来截取上面的一个回车操作,后面的nextLine()在第一次才能起作用;
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
sc.nextLine();
String []str=new String[num];
for(int i=0;i<num;i++)
{
Scanner sb=new Scanner(System.in);
str[i]=sb.nextLine();
}
Arrays.sort(str);
for(int i=0;i<num;i++)
{
System.out.println(str[i]);
}
}
将 for循环里的 sc.nextline()方法改为 sc.next();
在代码里加入测试语句可以看到 使用sc.nextline()时进入for循环后
当改成sc.next();后进入循环后会等待第一次输入
你第一次读取其实是
int num=sc.nextInt();
String []str=new String[num];
这时候str[0]是你的第一行数据
然后你你for循环的第一次又是
str[i]=sc.nextLine();
这时候你给str[0]又赋值了,但是这时候sc.nextLine()是空的 因为你已经读过一次了
这次他找的是下一行,并没有下一行,所以你把str[0]赋值为空
所以最后输出 数组[0]其实是空的