题目
任务要求:
输入数字并且排序。如果输入英文字母则输出“对不起只能是数字”,不退出还可以继续输入,连续按两次回车输出排序结果。
思路:
第一步
存储输入值
用集合,数组都可以,我在这里用的是集合。
在这里插入代码片
List<String> li = new ArrayList<String>();
提示用户,需要创建用户输入的类,如:Scanner类,或者InputStreamReader输入流,我在这里用的是后者。
在这里插入代码片
System.out.println("请输入数字:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
第二步
判断用户是否输入了两次回车,用count变量进行判断,每输入一次加一次。
当我们判断出用户按了两次回车,用户才不能进行输入,否则就会一直输入下去。需要用到循环,条件就是count !=2;
现在我们进入循环判断
1.判断用户是否输入回车
判断条件就是看输入字符的长度是否为零,为零只能是我们按了回车键。
所有代码为:
在这里插入代码片
str = bf.readLine();
if(str.length()==0) {
count ++;
}
count变量是用来判断回车次数的,当count加了两次后再执行判断的时候就会退出输入循环,显示输出排序结果。
2.判断输入的字符是否包含数字,我在这里用了正则表达式
else if(str.matches("[0-9]+")) {
count = 0;
li.add(str);
当判断出用户输入的信息与数字相匹配后,它就会加入集合里。在这里我赋值count为0,在后面的判断都是赋值0,只要判断不是回车都是赋值0,因为我们退出循环的判断条件是连续两次回车退出。所以只要下一次输入不是回车,自然就再从0开始
3.判断输入的字符是否包含字母
else if(str.matches("[A-Za-z]+")) {
count = 0;
System.out.println("对不起只能输入数字");
当判断出用户输入的信息与字母相匹配后,提示用户只能输入数字。
4.判断完了之后剩下的自然就是其他字符,或者是字母数字混合在一起的一些字符。
else {
count = 0;
System.out.println("输出的内容:"+str);
}
}while(count != 2);
第三步
这一步我们给集合进行排序,然后遍历输出就算完成了。
我们在这里使用的是List集合,要对List中存储的值进行排序,那怎么排序呢?
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
所以我们可以用到Collections.sort方法对list排序。
那么Collections.sort方法对list排序有两种方法:
第一种是list中的对象实现Comparable接口;一般都是按字的字典序的顺序进行排序,很明显不适合我们数字的排序。
第二种方法是根据Collections.sort重载方法来实现。所有我们需要自己来弄一个排序的方法。
记住升序就是我减他,降序就是他减我
那我们在这里是进行升序,我们先进行判断,数值比较大小肯定是比先长度,那么长度长,位数也就多,值也就最大。那么我们判断分四种情况:
第一种,当前对象的长度大于指定的对象的长度,返回1.
第二种,当前对象的长度小于指定的对象的长度,返回-1
第三种,当前对象和另一个对象是相同的,返回0
第四种,当前对象的长度等于指定的对象的长度。如果在这种情况下,那么我们就可以用Comparable接口下的compareTo()方法按照字典序的顺序来判断了。
代码如下:
Collections.sort(li , (a,b) -> {
if(a.equals(b))
return 0;
if(a.length()>b.length()) {
return 1;
}else if(a.length()<b.length()) {
return -1;
}else {
return a.compareTo(b);
}
});
我在这里用到了Lambada表达式,为了使代码变的更加简洁紧凑。a,b都是li集合里的对象值,不需要声明参数类型,编译器可以统一识别参数值,在{ }里的表达式返回值编译器也会自动返回。
总代码
public class Test {
public static void main(String[] args) throws Exception {
List<String> li = new ArrayList<String>();
System.out.println("请输入数字:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int count = 0;
String str = "";
do {
str = bf.readLine();
if(str.length()==0) {
count ++;
}else if(str.matches("[0-9]+")) {
count = 0;
li.add(str);
}else if(str.matches("[A-Za-z]+")) {
count = 0;
System.out.println("对不起只能输入数字");
}else {
count = 0;
System.out.println("输出的内容:"+str);
}
}while(count != 2);
Collections.sort(li , (a,b) -> {
if(a.equals(b))
return 0;
if(a.length()>b.length()) {
return 1;
}else if(a.length()<b.length()) {
return -1;
}else {
return a.compareTo(b);
}
});
for(int i = 0; i< li.size(); i++) {
System.out.println(li.get(i));}
}
}