验证手机号

要求:

获取一个手机号 11位 以18开头

  1. package com.woniuxy.demo1;
  2. import java.util.Scanner;
  3. import java.util.InputMismatchException;
  4. public class Test6 {
  5. public static void main(String[] args) {
  6. Scanner scanner = new Scanner(System.in);
  7. long num = 0;
  8. while (true) {
  9. try {
  10. System.out.println("请输入一个手机号码:");
  11. // 当scanner.nextInt()报错时会直接进入到catch中,赋值操作没有执行
  12. num = scanner.nextLong();
  13. String mobile = String.valueOf(num);
  14. int length = mobile.length();
  15. if(length != 11 || !mobile.startsWith("18")) {
  16. System.out.println("您输入的手机号码格式有误,请重新输入:");
  17. continue;
  18. }else {
  19. System.out.println("验证合格");
  20. break;
  21. }
  22. } catch (InputMismatchException e) {
  23. System.out.println("您输入的手机号码格式有误,请重新输入:");
  24. scanner.nextLine();
  25. }
  26. }
  27. System.out.println("手机号码是:" + num);
  28. System.out.println("接下来的代码");
  29. scanner.close();
  30. }
  31. }

此项目使用了

  • scanner方法
  • 异常捕获try……catch
  • String.valueOf //类型转字符串
  • string.startsWith //比较字符串首部,返回boolean值

遇到的问题

try……catch第二次捕获异常时,scanner方法没有产生程序阻塞,陷入死循环
解决方案
人为干预,在catch下加入scanner.nextLine();


输入的手机号超过int类型的上限
解决方案
将num改为long类型,输入改为scanner.nextLong()

另一种方式

  1. ……
  2. try {
  3. System.out.println("请输入一个手机号码:");
  4. // 当scanner.nextInt()报错时会直接进入到catch中,赋值操作没有执行
  5. num = scanner.nextLong();
  6. String mobile = String.valueOf(num);
  7. int length = mobile.length();
  8. if(length == 11 || mobile.startsWith("18")) {
  9. System.out.println("手机号码:"+mobile);
  10. break;
  11. }else {
  12. throw new InputMismatchException();//抛出最近的一个异常
  13. }
  14. } catch (InputMismatchException e) {
  15. System.out.println("您输入的手机号码格式有误,请重新输入:");
  16. scanner.nextLine();
  17. }
  18. ……

此处使用了抛出一个异常的方式处理,注意必须使用最近的一个异常来抛出
throw new InputMismatchException();

项目优化

  1. package com.woniuxy.demo1;
  2. import java.util.Scanner;
  3. import java.util.InputMismatchException;
  4. public class Test6 {
  5. public static void main(String[] args) {
  6. Scanner scanner = new Scanner(System.in);
  7. long num = 0;
  8. while (true) {
  9. try {
  10. System.out.println("请输入一个手机号码:");
  11. // 当scanner.nextInt()报错时会直接进入到catch中,赋值操作没有执行
  12. num = scanner.nextLong();
  13. String mobile = String.valueOf(num);
  14. int length = mobile.length();
  15. if(length == 11 || mobile.startsWith("18")) {
  16. System.out.println("手机号码:"+mobile);
  17. break;
  18. }else {
  19. throw new IllegalArgumentException("手机号码格式错误,请重新输入:");//抛出最近的一个异常
  20. }
  21. } catch (InputMismatchException e) {
  22. System.out.println("手机号码格式必须为数字,请重新输入:");
  23. scanner.nextLine();//关键点
  24. } catch (IllegalArgumentException e) {
  25. System.out.println(e.getMessage());
  26. //scanner.nextLine();
  27. }
  28. }
  29. System.out.println("接下来的代码");
  30. scanner.close();
  31. }
  32. }

双catch处理不同的异常/错误

scanner.nextLine();//只有scanner.nextInt()接受的数据格式出问题才需要,目的是产生阻塞
System.out.println(e.getMessage());//获得的信息是IllegalArgumentException的信息

结果输出
image.png

商城登录页面框架1

代码

  1. package com.woniuxy.demo_if;
  2. import java.util.Scanner;
  3. /**
  4. * 开关选择语句的语法
  5. * switch(条件){
  6. * case 值1:
  7. * 代码;
  8. * break;
  9. * case 值2:
  10. * 代码;
  11. * break;
  12. * default:
  13. * 以上case的值都没有匹配到时会执行此语句
  14. * }
  15. * @author Administrator
  16. *
  17. */
  18. public class Test3 {
  19. public static void main(String [] args) {
  20. Scanner scanner = new Scanner(System.in);
  21. //1.模拟一个登录注册退出的功能实现
  22. System.out.println("*******欢迎登录*******");
  23. System.out.println("\t1.登录");
  24. System.out.println("\t2.注册");
  25. System.out.println("\t0.退出");
  26. System.out.println("————————————————————");
  27. //2.使用switch……case实现
  28. String option = scanner.nextLine();
  29. switch(option) {
  30. case "1":
  31. loginUI();//调用外部代码
  32. break;//结束switch选择
  33. case "2":
  34. registerUI();//调用外部代
  35. break;
  36. case "0":
  37. System.out.println("退出");
  38. System.exit(0);//强制退出虚拟机
  39. break;
  40. default:
  41. System.out.println("您的输入有误");
  42. break;
  43. }
  44. scanner.close();
  45. }
  46. /**
  47. * 1.登录验证的方法
  48. */
  49. public static void loginUI() {
  50. System.out.println("欢迎进入登录页面");
  51. Scanner scanner = new Scanner(System.in);
  52. while(true) {
  53. System.out.println("请输入用户名");
  54. String username = scanner.nextLine();
  55. System.out.println("请输入密码");
  56. String password = scanner.nextLine();
  57. //System.out.println(username + ":" + password);
  58. //进行登录逻辑验证
  59. if("admin".equals(username) && "123".equals(password)) {
  60. break;
  61. }else {
  62. System.out.println("用户名或密码错误");
  63. }
  64. }
  65. System.out.println("登录成功");
  66. mainUI();
  67. scanner.close();
  68. }
  69. /**
  70. * 2.注册验证的方法
  71. */
  72. public static void registerUI() {
  73. System.out.println("欢迎进入注册页面");
  74. System.out.println("请输入用户名");
  75. System.out.println("请输入密码");
  76. System.out.println("请再次输入密码");
  77. }
  78. /**
  79. * 商城主页面
  80. */
  81. public static void mainUI() {
  82. System.out.println("欢迎进入商城页面");
  83. }
  84. }