A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

相信大家对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都应该感到自豪吧!


1 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2019-1-16 09:17:59
沙发
看一看。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马