验证手机号
要求:
获取一个手机号 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("欢迎进入商城页面");
}
}