Java基础入门(九)
- 1. String综合运用
- 1.1 用户登录案例
- 1.2 手机号屏蔽案例
- 1.3 判断一个数是否是回文数
- 1.4 六位数的验证码
1. String综合运用
1.1 用户登录案例
需求:
已知用户名和密码,请用程序实现模拟用户登录。
总共给三次机会,登录之后,给出相应的提示。
public static void main(String[] args) {
//1.定义两个字符串存储用户已经注册的用户名和密码
String regUsername = "jack";
String regPassword = "1234";
//2.创建Scanner对象
Scanner sc = new Scanner(System.in);
//3.定义一个for循环,循环3次
for (int i = 1; i <= 3; i++) {
//4.使用Scanner对象中的方法next获取用户登录的用户名和密码
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//5.使用用户登录的用户名和密码和用户已经注册的用户名和密码比较
if(username.equals(regUsername) && password.equals(regPassword)){
//true: 登录成功,给出提示"恭喜您登录成功!" break结束循环
System.out.println("恭喜您登录成功!");
break;
}else{
//false:登录失败,给出提示"您输入的用户名或密码有误,请重新输入,您还有xx次机会!"
if(i<3){//1,2
System.out.println("您输入的用户名或密码有误,请重新输入,您还有"+(3-i)+"次机会!");
}else{
System.out.println("您已经登录3次,账号已经被锁定,请联系管理员!");
}
}
}
}
1.2 手机号屏蔽案例
需求:
以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽
效果:156****1234
思路:
1. 键盘录入一个字符串,用 Scanner 实现
2. 截取字符串前三位
3. 截取字符串后四位
4. 将截取后的两个字符串,中间加上****进行拼接
5. 输出结果
public static void main(String[] args) {
//1. 键盘录入一个字符串,用 Scanner 实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的手机号:");
String phoneNumber = sc.next();
//2. 截取字符串前三位
String s1 = phoneNumber.substring(0, 3);//0,1,2
//3. 截取字符串后四位
String s2 = phoneNumber.substring(7);//7,8,9,10
//4. 将截取后的两个字符串,中间加上****进行拼接
String s3 = s1+"****"+s2;
//5. 输出结果
System.out.println(s3);
}
1.3 判断一个数是否是回文数
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数。现在通过键盘录入一个整数,通过程序判断该数是否是回文数。
思路1:
1. 键盘录入一个整数,用 Scanner 实现
2. 将该整数的每位上的数提出出来放入数组中(按照我们的习惯最好倒着放)
3. 先定义一个状态flag=true,然后用for循环比较数组两端的数字是否相等,循环次数是length/2;
4. 如果循环中出现不相等的情况,flag=false,结束循环
5. 根据flag判断数是否是回文数
public static void ispalindromic1(){
//键盘输入一个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入要判断的整数:");
int num = sc.nextInt();
//将整数各个位上的数字提取出来,放入数组中
int[] arr = numToArr(num);
//创建状态flag
boolean flag = true;
//使用for循环比较首尾两端数字是否相等,循环次数是length/2
for (int i = 0; i < arr.length / 2; i++) {
if (arr[i] != arr[arr.length - 1 -i]){
//只要有一组数字不等,改变flag状态为false,结束循环
flag = false;
break;
}
}
//根据flag状态来判断数字
if (flag){
System.out.println(num+"是回文数");
}else {
System.out.println(num+"不是回文数");
}
}
public static int[] numToArr(int num){
int a = num;
//计算整数的位数
int count = 0;
while (a>=1){
count++;
a /= 10;
}
//创建和位数一样长度的数组
int[] arr = new int[count];
arr[count-1] = num%10;
//创建数组,倒着放入每位上的数字
for (int i = count-2; i >= 0; i--) {
num /= 10;
arr[i] = num%10;
}
return arr;
}
思路1:
1. 键盘录入一个整数,用 Scanner 实现
2. 将数字转为字符串
3. 创建StringBuilder类型的中间变量,对原字符串进行反转
4. 将StringBuilder类型的变量转为String类型的变量
5. 使用equals()方法比较反转前后String内容是否相同
public static void ispalindromic2(){
//键盘输入一个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入要判断的整数:");
int num = sc.nextInt();
//将整数转为字符串
String oldNum = ""+num;
//创建StringBuilder类型的中间变量,对原字符串进行反转
StringBuilder sb = new StringBuilder(oldNum);
sb.reverse();
//将StringBuilder类型的变量转为String类型
String newNum = sb.toString();
//使用equals()方法比较String内容是否相同
if (oldNum.equals(newNum)){
System.out.println(num+"是回文数");
}else {
System.out.println(num+"不是回文数");
}
}
1.4 六位数的验证码
需求:
获取长度为 6 的随机字符串.
字符串由随机的 5 个大写英文字母和 1 个 0-9 之间(包含 0 和 9)的整数组成
思路:
1.先定义长度为 26,元素值为 26 个大写英文字母的数组 chs
2.从数组中随机选5个大写字母(大写字母可重复)
3.随机生成一个0-9的数
4.将生成的大写字母和数字放入字符串中,数字的位置是随机的
public static String varification(){
//生成26位大写字母的字符数组
char[] chs = new char[26];
char c = 'A';
for (int i = 0; i < 26; i++) {
chs[i] = c;
c++;
}
StringBuilder sb = new StringBuilder();
Random r = new Random();
//数字的位置再0-5之间
int numIndex = r.nextInt(6);
for (int i = 0; i < 6; i++) {
//数字的位置由随机数决定
if (i==numIndex){
int num = r.nextInt(10);
sb.append(num);
}else {
char letter = chs[r.nextInt(26)];
sb.append(letter);
}
}
return sb.toString();
}