【Java】练习:键盘录入数据

一、需求

需求:
    键盘录入自己心仪的女朋友姓名和年龄。
    姓名的长度在 3 - 10之间,
    年龄的范围为 18 - 40,
    超出这个范围是异常数据不能赋值,需要重新录入,一直录到正确为止。
提示:
    需要考虑用户在键盘录入时的所有情况。
    比如:录入年龄时超出范围,录入年龄时录入了abc等情况

写代码前,需要知道 抛出捕获 的核心思想。

抛出:告诉调用者出错了,因此抛出更多是写在方法里面。

捕获:捕获更多的是写在方法的调用处,它的核心是让程序不要停止,程序能继续运行下去。


二、测试类

//1.创建键盘录入的对象
Scanner sc = new Scanner(System.in);
//2.创建女朋友的对象
GirlFriend gf = new GirlFriend();
//3.接收女朋友的姓名
System.out.println("请输入你心仪的女朋友的名字");
String name = sc.nextLine();
gf.setName(name);
System.out.println("请输入你心仪的女朋友的年龄");
String ageStr = sc.nextLine();
int age = Integer.parseInt(ageStr);
gf.setAge(age);

//5.打印
System.out.println(gf);

在上面代码中,如果年龄输入字符,是会报错的。

因此我们需要对这种情况进行处理,还需要对题目进行处理。

String ageStr = sc.nextLine();
// 办法一:我们在这里写if判断是没有问题的,但是当数据量比较多的时候,这种写法太过于繁琐
if (name.length() >= 3 && name.length() <= 10) {
    gf.setName(name);
}
int age = Integer.parseInt(ageStr);
gf.setAge(age);

那该怎么办呢?在JavaBean中,有一个 set方法,此时我们就可以将这些判断写在 set方法 里面了。

其实 set方法 的核心也是这样,它会对你传递过来的数据进行校验,满足要求才赋值,不满足要求直接pass不要。

抛出异常时,Java没有一个类能完美表示我们现在出的问题,此时就可以写 RuntimeException,创建运行时异常的父类,这就可以了。


三、GirlFriend.java

在两个方法的后面都可以写 throws RuntimeException,但是这个是可以省略的,因为 RuntimeException 是运行时期异常,运行时异常可以省略不写。

public void setName(String name) {
    int len = name.length();
    if(len < 3 || len > 10){
        throw new RuntimeException();
    }
    this.name = name;
}

public void setAge(int age) {
    if(age < 18 || age > 40){
        throw new RuntimeException();
    }
    this.age = age;
}

接下来就要在测试类中处理异常信息。

如果不处理,就会交给虚拟机处理,它会将异常的信息打印在控制台,而且程序会停止。

这个不是我们想要的,我们想要的是:需要重新录入,一直录到正确为止。

因此这里的异常我们需要处理它。

//1.创建键盘录入的对象
Scanner sc = new Scanner(System.in);
//2.创建女朋友的对象
GirlFriend gf = new GirlFriend();
while (true) {
    //3.接收女朋友的姓名
    try {
        // 输出语句放在try外面也是没问题的,但是为了保证代码的结构性,放里面也是ok的
        System.out.println("请输入你心仪的女朋友的名字");
        String name = sc.nextLine();
        gf.setName(name);
        //4.接收女朋友的年龄
        System.out.println("请输入你心仪的女朋友的年龄");
        // 这里不用nextInt()是因为如果它输入字符就会报错
        // 所以此时采取nextLine(),不管你录什么哪怕录的是abc,先录入到系统中,然后再来进行转换 / 判断,如果有问题,再让你重新录就行了
        String ageStr = sc.nextLine();
        int age = Integer.parseInt(ageStr);
        gf.setAge(age);
        //如果所有的数据都是正确的,那么跳出循环
        break;
    } catch (NumberFormatException e) {
        System.out.println("年龄的格式有误,请输入数字");
        //这里continue可写可不写,因为就算你不写,它下面也没有其他代码了
        //continue;
    } catch (RuntimeException e) {
        System.out.println("姓名的长度或者年龄的范围有误");
        //continue;
    }
}
//5.打印
System.out.println(gf);
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值