此题出自牛客网的华为机试在线训练专题
题目描述
给定n个字符串,请对n个字符串按照字典序排列。
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。
示例1
输入
9
cap
to
cat
card
two
too
up
boat
boot
输出
boat
boot
cap
card
cat
to
too
two
up
题解如下
import java.util.Scanner;
import java.util.Collections;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = Integer.parseInt(sc.nextLine());
ArrayList<String> list = new ArrayList<>();
while(num>0 && sc.hasNextLine()){
String s = sc.next();
list.add(s);
num--;
}
Collections.sort(list);
for(String str : list){
System.out.println(str);
}
sc.close();
}
}
这道题逻辑上还是挺简单的,主要是之前一直用String s = sc.nextLine();导致数据一直不能按照自己的想法添加到容器中,造成了数据丢失。原因是Scanner类中的nextLine()方法是会读取当前行的,而在这之前的 int num = Integer.parseInt(sc.nextLine())读取了一行之后,在原位置还留下了一个换行符,所以,在后面读取的时候,把这个换行符也给读取进去了。。。
这里还是有一点疑惑的,有时间再做个测试吧