package com.heima.test;
import java.util.Scanner;
public class Test1 {
/**
* 题目分数:7分
* 建议时间:10分钟
*
* 题目要求:
* 编写一个注册用户的程序,要求检测用户输入的用户名和密码是否合法,先输入用户名,检测不合法则要求重新输入,再输入密码,不合法则要求重新输入
* 1、用户名要求:用户名必须是6-10位之间的字母或者数字并且不能以数字开头
* 2、密码要求:密码长度在6-10位之间,密码中必须且只能包含英文大小写、数字
*/
public static void main(String[] args) {
/**
* 思路:
* 1、创建一个键盘输入对象
* 2、两个并列的循环,分别控制用户名和密码的判断流程
*/
Scanner sc = new Scanner(System.in);
System.out.println("来个用户名");
String userName;
String passWord;
while(true){
userName = sc.nextLine();
//如果不合法,就重新输入,如果合法,就直接跳出循环
if(!isUserNameValid(userName)){
System.out.println("用户名不合法,重来");
continue;
}
break;
}
System.out.println("用户名合法,恭喜");
System.out.println("来个密码");
while(true){
passWord = sc.nextLine();
//如果不合法,就重新输入,如果合法,就直接跳出循环
if(!isPassWordValid(passWord)){
System.out.println("密码不合法,重来");
continue;
}
break;
}
System.out.println("注册成功,用户名是:" + userName + " 密码是:" + passWord);
}
/**
* 2、密码要求:密码长度在6-10位之间,密码中必须且只能包含英文大小写、数字
*/
private static boolean isPassWordValid(String passWord) {
//判断长度是否合法
int length = passWord.length();
if(length < 6 || length > 10){
return false;
}
//判断密码中是否全是字母或者数字
if(!isNumberOrEng(passWord)){
return false;
}
//判断密码中是否包含字母
if(!containsEng(passWord)){
return false;
}
//判断密码中是否包含数字
if(!containsNum(passWord)){
return false;
}
//如果所有不合法的情况都排除,就说明密码是合法的
return true;
}
/**
* 判断密码是否包含数字
*/
private static boolean containsNum(String passWord) {
//先把字符串转成字符数组
char[] arr = passWord.toCharArray();
//遍历字符数组,逐个字符进行判断
for (char c : arr) {
//如果找到了数字,就直接返回true
if (c >= '0' && c <= '9'){
return true;
}else{//如果当前字符不是数字,就继续下次判断
continue;
}
}
//如果所有的字符都判断完成,都没有返回true,就说明没有数字
return false;
}
/**
* 判断密码中是否有英文字母
* 思路:和判断是否有数字相同,不再赘述
*/
private static boolean containsEng(String passWord) {
char[] arr = passWord.toCharArray();
for (char c : arr) {
if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'){
return true;
}else {
continue;
}
}
return false;
}
/**
* 判断用户名是否合法
*/
private static boolean isUserNameValid(String userName) {
//先判断长度
int length = userName.length();
if(length < 6 || length > 10){
return false;
}
//判断用户名中是否全是数字或者字母
if(!isNumberOrEng(userName)){
return false;
}
//判断首字母是否是数字,如果是数字就返回false
char[] arr = userName.toCharArray();
if(arr[0] >= '0' && arr[0] <= '9'){
return false;
}
//如果所有的情况都判断完成,就说明用户名合法
return true;
}
/**
* @param userName
* @return
*/
private static boolean isNumberOrEng(String userName) {
//转换成字符数组
char[] arr = userName.toCharArray();
//遍历字符数组
for (char c : arr) {
//如果某一个字符符合要求,就判断下一个字符
if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9'){
continue;
}else{
//如果某一个字符不符合要求,就直接认为该字符串不合法
return false;
}
}
//如果所有的字符都经过了判断,还没有return false,就说明这个字符串是合法的,没有非法的字符
return true;
}
}
|
|