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();
    }