相信大家对Java.lang.util.Scanner对象已经非常熟悉,这是对系统输入的信息进行收集,并进行相关处理的工具类。我们先来看一道题:
键盘输入20个字符
统计其中出现大写字母和小写字母的个数
这个题目大家都会觉得很简单,我一开始也是这么认为的。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
String str = ""; // 新建空字符串
Scanner sc = new Scanner(System.in); // 新建Scanner
for (int i = 0; i < 20; i++) { //遍历20次收集字符
System.out.println("请输入第" + (i + 1) + "个字符");
str += sc.next();
}
char[] chars = str.toCharArray(); // 字符串转char数组
int upper = 0; //定义计数器
int lower = 0;
for (int i = 0; i < chars.length; i++) { // 遍历数组
char c = chars;
if (c >= 'A' && c <= 'Z') { // 判断是否在 A~Z之间
upper++;
} else if (c >= 'a' && c <= 'z') { // 判断是否在 a~z 之间
lower++;
}
}
System.out.println("大写字母有:" + upper + "个"); //输出
System.out.println("小写字母有:" + lower + "个");
}
}
一气呵成,简直完美,然后run了一下
发现1个问题,一个问题是Scanner由于是接受字符串,所以对数量没有限制,所以输入大于1个字符也不能判断是否错误。
所以对上述代码进行更改,加入了判断机制,并且可以控制字符串获取的长度
String str = ""; // 新建空字符串
System.out.println("输入20个字符开始"); // 显示信息
int a = 0; // 输入计数
while (true) { // 输入加入判断机制
System.out.print("请输入第" + (a + 1) + "个字符: ");
String str2 = new Scanner(System.in).next();
if (str2.length() > 1) { // 判断字符串长度
System.out.println("输入的不是单个字符,请重试");
} else {
str += str2;
a++;
}
if (a >= 20) { // 达到20个字符以后 退出循环
break;
}
}
然后我又跑了一下,又发现一个bug,就是在输入的时候 如果输入空格,就不能结束当前的输入
百思不得骑姐!
只好去翻API, 突然发现老师提过nextline(); 于是改了一句:
String str2 = new Scanner(System.in).nextLine();
终于可以完美执行!
为了可以自检,我还加了一句显示字符串得语句:
System.out.println("输入的字符串是:"+ Arrays.toString(chars)); // 输出字符串
尽管这只是一个小小的题目,但是对于思路的培养和问题的解决都是有很大的帮助,要对每一个问题有思考和解决的思路,努力做出的一个个顺利运行程序,每一个coder都应该感到自豪吧!
|
|