验证手机号
要求:
获取一个手机号 11位 以18开头
package com.woniuxy.demo1;import java.util.Scanner;import java.util.InputMismatchException;public class Test6 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num = 0;while (true) {try {System.out.println("请输入一个手机号码:");// 当scanner.nextInt()报错时会直接进入到catch中,赋值操作没有执行num = scanner.nextLong();String mobile = String.valueOf(num);int length = mobile.length();if(length != 11 || !mobile.startsWith("18")) {System.out.println("您输入的手机号码格式有误,请重新输入:");continue;}else {System.out.println("验证合格");break;}} catch (InputMismatchException e) {System.out.println("您输入的手机号码格式有误,请重新输入:");scanner.nextLine();}}System.out.println("手机号码是:" + num);System.out.println("接下来的代码");scanner.close();}}
此项目使用了
- scanner方法
- 异常捕获try……catch
- String.valueOf //类型转字符串
- string.startsWith //比较字符串首部,返回boolean值
遇到的问题
①
try……catch第二次捕获异常时,scanner方法没有产生程序阻塞,陷入死循环
解决方案
人为干预,在catch下加入scanner.nextLine();
②
输入的手机号超过int类型的上限
解决方案
将num改为long类型,输入改为scanner.nextLong()
另一种方式
……try {System.out.println("请输入一个手机号码:");// 当scanner.nextInt()报错时会直接进入到catch中,赋值操作没有执行num = scanner.nextLong();String mobile = String.valueOf(num);int length = mobile.length();if(length == 11 || mobile.startsWith("18")) {System.out.println("手机号码:"+mobile);break;}else {throw new InputMismatchException();//抛出最近的一个异常}} catch (InputMismatchException e) {System.out.println("您输入的手机号码格式有误,请重新输入:");scanner.nextLine();}……
此处使用了抛出一个异常的方式处理,注意必须使用最近的一个异常来抛出
throw new InputMismatchException();
项目优化
package com.woniuxy.demo1;import java.util.Scanner;import java.util.InputMismatchException;public class Test6 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num = 0;while (true) {try {System.out.println("请输入一个手机号码:");// 当scanner.nextInt()报错时会直接进入到catch中,赋值操作没有执行num = scanner.nextLong();String mobile = String.valueOf(num);int length = mobile.length();if(length == 11 || mobile.startsWith("18")) {System.out.println("手机号码:"+mobile);break;}else {throw new IllegalArgumentException("手机号码格式错误,请重新输入:");//抛出最近的一个异常}} catch (InputMismatchException e) {System.out.println("手机号码格式必须为数字,请重新输入:");scanner.nextLine();//关键点} catch (IllegalArgumentException e) {System.out.println(e.getMessage());//scanner.nextLine();}}System.out.println("接下来的代码");scanner.close();}}
双catch处理不同的异常/错误
scanner.nextLine();//只有scanner.nextInt()接受的数据格式出问题才需要,目的是产生阻塞
System.out.println(e.getMessage());//获得的信息是IllegalArgumentException的信息
结果输出:
商城登录页面框架1
代码
package com.woniuxy.demo_if;import java.util.Scanner;/*** 开关选择语句的语法* switch(条件){* case 值1:* 代码;* break;* case 值2:* 代码;* break;* default:* 以上case的值都没有匹配到时会执行此语句* }* @author Administrator**/public class Test3 {public static void main(String [] args) {Scanner scanner = new Scanner(System.in);//1.模拟一个登录注册退出的功能实现System.out.println("*******欢迎登录*******");System.out.println("\t1.登录");System.out.println("\t2.注册");System.out.println("\t0.退出");System.out.println("————————————————————");//2.使用switch……case实现String option = scanner.nextLine();switch(option) {case "1":loginUI();//调用外部代码break;//结束switch选择case "2":registerUI();//调用外部代break;case "0":System.out.println("退出");System.exit(0);//强制退出虚拟机break;default:System.out.println("您的输入有误");break;}scanner.close();}/*** 1.登录验证的方法*/public static void loginUI() {System.out.println("欢迎进入登录页面");Scanner scanner = new Scanner(System.in);while(true) {System.out.println("请输入用户名");String username = scanner.nextLine();System.out.println("请输入密码");String password = scanner.nextLine();//System.out.println(username + ":" + password);//进行登录逻辑验证if("admin".equals(username) && "123".equals(password)) {break;}else {System.out.println("用户名或密码错误");}}System.out.println("登录成功");mainUI();scanner.close();}/*** 2.注册验证的方法*/public static void registerUI() {System.out.println("欢迎进入注册页面");System.out.println("请输入用户名");System.out.println("请输入密码");System.out.println("请再次输入密码");}/*** 商城主页面*/public static void mainUI() {System.out.println("欢迎进入商城页面");}}
