第三周学习日历

这一周在练车,感觉练学车好难...
在空余时间我也学习了Java的一些知识,在学习中自己敲了一些代码记录下来...
这周最大的进步是自己根据要求写了一个学生管理系统,虽然之前用C++写过类似的,但是用一门新的语言,有不同的成就感>_<
7月15日参加了睿康的编程赛 写出来3题半 1000多名 不知道能不能拿奖 感觉自己花200块白坐了俩小时
算法与数据结构这周没学习,感觉自己第一周定的计划也泡汤了 哈哈 没事
键盘录入

1.
//nextInt() 接收整数
//nextDouble() 接收小数
//next() 接收字符串--遇到空格,制表符,回车就停止接收
2.
//nextLine();接受字符串--遇到回车才会停止 
//
package Car;

public class Car {
    private String brand;
    private int price;
    private String color;

    //默认构造
    public Car() {
    }

    //有参构造
    public Car(String brand, int price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void showCarInfo(){
        System.out.println(this.brand + ' ' + this.color + ' ' + this.price);
    }
}

package Car;

import java.util.Scanner;

public class CarTest {
    public static void main(String[] args){
        Car[] arr = new Car[3];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            Car c = new Car();
            System.out.println("请输入车的品牌");
            String brand = sc.next();
            c.setBrand(brand);
            System.out.println("请输入车的颜色");
            String color = sc.next();
            c.setColor(color);
            System.out.println("请输入车的价格");
            int price = sc.nextInt();
            c.setPrice(price);
            arr[i] = c;
        }
        for (int i = 0; i < arr.length; i++) {
            arr[i].showCarInfo();
        }
    }
}

package Stu;

public class Student {
    private int id;
    private String name;
    private int age;


    public Student() {
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        this.age = age;
    }

}

package Stu;

public class StudentTest {
    public static void main(String[] args) {
        Student[] arr = new Student[3];

        Student stu1 = new Student(1001,"张三",20);
        Student stu2 = new Student(1002,"李四",19);

        arr[0] = stu1;
        arr[1] = stu2;
        Student stu3 = new Student(1003,"王五",21);
        boolean flag = contains(arr,stu3);
        if(flag){
            System.out.println("学生编号重复!");
        }
        else{
            int count = countArr(arr);
            if(count < arr.length){
                arr[count] = stu3;
            }
            else {
                Student[] newArr = creatNewArr(arr);
                newArr[count] = stu3;
                arr = newArr;
            }
        }
        printArr(arr);

    }

    public static int countArr(Student[] arr){
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null)count++;
            else break;
        }
        return count;
    }

    public static boolean contains(Student[] arr,Student stu){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null){
                if(arr[i].getId() == stu.getId()) return true;
            }
        }
        return false;
    }

    public static void printArr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null){
                System.out.println(arr[i].getId() + "  " + arr[i].getName() + "  "+ arr[i].getAge());
            }
        }
    }

    public static Student[] creatNewArr(Student[] arr){
        Student[] newArr = new Student[arr.length+1];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

}


API(Application programming Interface):应用程序编程接口
简单理解就是别人以及写好的东西,直接用
Java API:指的就是JDK中提供的各种功能的Java类
字符串不可变,他们的值在创建后不能被更改

package StringTest;

//String 的构造函数
public class Str {
    public static void main(String[] args) {

        //1.直接赋值
        String s1 = "abc";
        System.out.println(s1);
        //2.new关键字
        String s2 = new String("abcd");
        System.out.println(s2);
        //3.根据字符数组,创建字符串对象
        char[] chs = {'a','b','c','d','e'};
        String s3 = new String(chs);
        System.out.println(s3);
        //4.根据字节数组,创建字符串对象
        byte[] bytes = {97,98,99,100,101,102};
        String s4 = new String(bytes);
        System.out.println(s4);

    }
}

字符串当使用树干引号直接赋值时,系统会检查该字符串在串池中是否存在
不存在:创建新的
存在:复用
String直接赋值会比较节省空间,

基本数据类型比较的是数据值,引用数据类型比较的是地址值

字符串比较

  • boolean equals方法(要比较的字符串) 完全一样为true,否则为false
  • boolean equalsIgnoreCase(要比较的字符串) 忽略大小写
package StringTest;

public class Equal {
    public static void main(String[] args) {

        String s1 = "abc";
        String s2 = new String("abc");
        System.out.println(s1 == s2);

        System.out.println(s1.equals(s2));

        System.out.println(s1.equalsIgnoreCase(s2));
    }

}
**键盘录入的字符串是new出来的**
**遍历字符串**
* public char charAt(int index); 根据索引返回字符
* public int length(); 返回字符串的长度
* 字符串的长度 : 字符串对象.length() 
package StringTest;

import java.util.Scanner;

public class StringDemo {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        String s1 = sc.next();
        for (int i = 0; i < s1.length(); i++) {
            //字符串对象.charAt(index) 取出字符
            System.out.println( s1.charAt(i) );
        }
    }
}
//字符串拼接
package StringTest;

public class StringDemo2 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        String res = arrToString(arr);
        System.out.println(res);
    }

    public static String arrToString(int[] arr){
        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1){
                result += arr[i] + "]";
            }
            else result += arr[i] + ", ";
        }
        return result;
    }

}

package StringTest;

import java.util.Scanner;

//字符串反转
public class StringDemo3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String result = "";
        for(int i = s.length() - 1; i >= 0; i--){
            result += s.charAt(i);
        }
        System.out.println(result);
    }
}


package me.JavaStudy;

import java.util.Scanner;
//币值转换
public class Captial {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字");
        int number = sc.nextInt();
        String result = "";
        String[] arr = {"佰","什","万","仟","佰","什","元"};
        while(number != 0){
            result = captialNumber(number%10) + result;
            number /= 10;
        }
        int count = result.length();
        for(int i = count; i < 7; i++){
            result = "零" + result;
        }
        String ans = "";
        for (int i = 0; i < result.length(); i++) {
            ans += result.charAt(i) + arr[i];
        }
        System.out.println(ans);
    }

    public static String captialNumber(int num){
        String[] arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        return arr[num];
    }

}

package me.JavaStudy;

public class StringDemo1 {
    public static void main(String[] args) {
        String s = "16834331202";
        String start = s.substring(0,3);
        String end = s.substring(7);
        String result = start + "****" + end;
        System.out.println(result);
    }
}

package me.JavaStudy;

//replace函数
public class StringDemo2 {
    public static void main(String[] args) {
        String s = "你好,我是张三";
        System.out.println(s);
        s = s.replace("张三","李四");
        System.out.println(s);
    }
}

StringBulider概述

StringBuilder 可以看成一个容器,创建之后里面的内容是可变的

  • 作用: 提高字符串的操作效率

使用StringBuilder的两个场景:1.字符串拼接 2.字符串反转
StringBuilder的使用案例

package me.JavaStudy;

public class StringBuliderDemo1 {
    public static void main(String[] args) {
        //1.创建对象  因为StringBuilder是Java已经写好的类,打印对象是属性值,而不是地址值
        StringBuilder sb = new StringBuilder("abcd");

        //2.添加元素
        sb.append(8.8888);

        int len = sb.length();
        System.out.println(len);


        //反转操作
        sb.reverse();
        System.out.println(sb);

        //添加字符串
        sb.append("abcdefg");

        //再把StringBuilder变回字符串
        String s = sb.toString();
        System.out.println(s);
    }
}

回文字符串

package me.JavaStudy;

import java.util.Scanner;

public class StringBuliderDemo1 {
    public static void main(String[] args) {

        //链式编程
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s =  sc.next();
        String result = new StringBuilder().append(s).reverse().toString();
        if(s.equals(result)){
            System.out.println("YES");
        }
        else System.out.println("NO");
    }
}

数组变成字符串

package me.JavaStudy;

public class StringBuliderDemo1 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        System.out.println(arrToString(arr));
    }

    public static String arrToString(int[] arr){
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1)sb.append(arr[i]).append("]");
            else sb.append(arr[i]).append(", ");
        }
        return sb.toString();
    }
}

StringJoiner概述

  • StringJoiner跟StringBuilder一样,也可以看成一个容器,创建之后里面的内容可以改变
  • 作用: 提高字符串的操作效率,而且代码编写特别简洁,但是市面上很少有人用(JDK8出现的)


StringJoiner没有空参构造

package me.JavaStudy;

import java.util.StringJoiner;

public class StringJoinerStudy {
    public static void main(String[] args) {
        StringJoiner sj = new StringJoiner("---");
        sj.add("aaa").add("bbb").add("ccc");
        System.out.println(sj);

        StringJoiner sj2 = new StringJoiner(",","[","]");
        sj2.add("1").add("2").add("3");
        String s = sj2.toString();
        System.out.println(s);
    }
}

调整字符串内容

package me.JavaStudy;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        int len = a.length();
        boolean flag = check(a,b);
        if(flag) System.out.println("YES");
        else System.out.println("NO");
    }
    
    public static boolean check(String a,String b){
        for (int i = 0; i < a.length(); i++) {
            a = rotate(a);
            if(a.equals(b))return true;
        }
        return false;
    }
    
    
    public static String rotate(String s){
        return  s.substring(1) + s.charAt(0);
    }
}


字符串相乘(非高精度)

package me.JavaStudy;

//字符串相乘(非高精度)
public class Test2 {
    public static void main(String[] args) {
        String s1 = "23456";
        String s2 = "1111";

        int a = 0 , b = 0;
        for (int i = 0; i < s1.length(); i++) {
            a = a * 10 + (s1.charAt(i) - '0');
        }
        for (int i = 0; i < s2.length(); i++) {
            b = b * 10 + (s2.charAt(i) - '0');
        }
        System.out.println(a*b);
    }

}

计算一句话中最后一个单词的长度

package me.JavaStudy;

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int count = 0;
        for(int i = s.length() - 1; i >= 0; i--){
            if(s.charAt(i) == ' ')break;
            count++;
        }
        System.out.println(count);
    }
}

集合

集合和数组的对比:

  • 长度:集合可以自由伸缩
  • 存储类型: 数组都可以存,集合可以存引用数据类型,存基本数据类型需要变成包装类

ArrayList成员方法

package me.JavaStudy;

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args){
        //1.创建ArrayList
        ArrayList<String> list = new ArrayList<>();
        System.out.println(list);
        //2.增删改查
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        System.out.println(list);
        System.out.println("集合大小" + list.size());

        list.remove("aaa");
        System.out.println(list);
        String s = list.remove(0);
        System.out.println(s);
        System.out.println(list);

        list.set(0,"0.0");
        System.out.println(list);

        for (int i = 0; i < list.size(); i++) {
            String s2 = list.get(i);
            System.out.println(s2);
        }
    }
}

包装类
int -> Integer
char -> Character
其他数据类型都是首字母大写变成包装类

package me.JavaStudy;

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args){
        //1.创建ArrayList
        ArrayList<Integer> list1 = new ArrayList<>();

        list1.add(1);
        list1.add(2);
        System.out.println(list1);

        ArrayList<Character>list2 = new ArrayList<>();
        list2.add('a');
        list2.add('b');
        System.out.println(list2);

        ArrayList<Double> list3 = new ArrayList<>();
        list3.add(1.00213);
        list3.add(1.0001212);
        System.out.println(list3);
    }
}

ArrayList接收自定义数据类型

package Test;

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();

        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 2; i++) {
            Student s = new Student();
            System.out.println("请输入学生姓名");
            String name = sc.next();
            System.out.println("请输入学生年龄");
            int age = sc.nextInt();
            s.setAge(age);
            s.setName(name);
            list.add(s);
        }
        for (int i = 0; i < list.size(); i++) {
            list.get(i).showStudentInfo();
        }
    }
}

获取价格低于3000的手机

package Test;

import java.util.ArrayList;

public class ArrayListTest2 {
    public static void main(String[] args) {
        ArrayList<Phone> list = new ArrayList<>();
        Phone p1 = new Phone("小米", 2999);
        Phone p2 = new Phone("锤子",999);
        Phone p3 = new Phone("苹果",8999);

        list.add(p1);
        list.add(p2);
        list.add(p3);

        ArrayList<Phone> p = getPhoneInfo(list);
        for (int i = 0; i < p.size(); i++) {
            p.get(i).showPhoneInfo();
        }
    }

    public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
        ArrayList<Phone> result = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getPrice() < 3000){
                result.add(list.get(i));
            }
        }
        return result;
    }
}

学生管理系统简易版

package StudentSystemTest;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<Student> list = new ArrayList<>();
        while(true){
            showMenu();
            String choose = sc.next();
            switch (choose) {
                case "1" -> addStudent(list);
                case "2" -> removeStudent(list);
                case "3" -> updateStudent( list);
                case "4" -> showStudentInfo(list);
                case "5" -> {
                    System.out.println("退出");
                    System.exit(0);
                }
                default -> System.out.println("输入有误,请重新输入");
            }
        }
    }

    //显示界面
    public static void showMenu() {
        System.out.println("-------欢迎来到学生管理系统-------");
        System.out.println("1:添加学生");
        System.out.println("2:删除学生");
        System.out.println("3:修改学生");
        System.out.println("4:查询学生");
        System.out.println("5:退出");
        System.out.println("-----------------------------");
        System.out.println("请输入你的选择");
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("需要添加学生的数量");
        int count = sc.nextInt();
        for (int i = 0; i < count; i++) {
            System.out.println("输入学生id");
            String id = sc.next();
            System.out.println("输入学生姓名:");
            String name = sc.next();
            System.out.println("输入学生年龄:");
            int age = sc.nextInt();
            System.out.println("输入学生家庭住址:");
            String address = sc.next();
            Student s = new Student(id,name,age,address);
            list.add(s);
        }
        System.out.println("添加成功!");
    }

    //删除学生
    public static void removeStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要删除的学生id:");
        String id = sc.next();
        boolean flag = idIsExist(list,id);
        if(flag){
            int index = getIndex(list,id);
            list.remove(index);
            System.out.println("删除成功!");
        }
        else System.out.println("删除失败!,id不存在!");
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要修改的学生id");
        String id = sc.next();
        int index = getIndex(list,id);
        if(index > -1){
            System.out.println("输入学生id");
            String sid = sc.next();
            list.get(index).setId(sid);
            System.out.println("输入学生姓名:");
            String name = sc.next();
            list.get(index).setName(name);
            System.out.println("输入学生年龄:");
            int age = sc.nextInt();
            list.get(index).setAge(age);
            System.out.println("输入学生家庭住址:");
            String address = sc.next();
            list.get(index).setAddress(address);
            System.out.println("修改成功!");
        }
        else System.out.println("修改失败!,id不存在!");
    }

    //查询学生
    public static void showStudentInfo(ArrayList<Student> list) {
        for (int i = 0; i < list.size(); i++) {
            list.get(i).showStudentInfo();
        }
    }

    //判断id是否存在
    public static boolean idIsExist(ArrayList<Student> list,String id){
        int index = getIndex(list,id);
        if(index > -1)return true;
        return false;
    }

    //返回id对应的索引
    public static int getIndex(ArrayList<Student> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getId().equals(id)){
                return i;
            }
        }
        return -1;
    }

}


学生管理系统升级版

package StudentSystemTest;

public class Student {
    private String id;
    private String name;
    private int age;
    private String address;

    public Student() {

    }

    public Student(String id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void showStudentInfo(){
        System.out.println(this.getId()+ " " + this.getName() + " "+this.getAge() + " " + this.getAddress());
    }

    /**
     * 获取
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

}

package StudentSystemTest;

public class User {
    private String username;
    private String password;
    private String idCard;
    private String phoneNumber;

    public User() {
    }

    public User(String username, String password, String idCard, String phoneNumber) {
        this.username = username;
        this.password = password;
        this.idCard = idCard;
        this.phoneNumber = phoneNumber;
    }

    /**
     * 获取
     * @return username
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取
     * @return password
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 获取
     * @return idCard
     */
    public String getIdCard() {
        return idCard;
    }

    /**
     * 设置
     * @param idCard
     */
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    /**
     * 获取
     * @return phoneNumber
     */
    public String getPhoneNumber() {
        return phoneNumber;
    }

    /**
     * 设置
     * @param phoneNumber
     */
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

}


package StudentSystemTest;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<User> userList = new ArrayList<>();
        loop : while(true){
            showLogin();
            String choose1 = sc.next();
            switch(choose1){
                case "1" ->
                {
                    boolean is = login(userList);
                    if(is) break loop;
                }
                case "2" -> register(userList);
                case "3" -> setPassword(userList);
                default -> System.out.println("输入有误,请重新输入!");
            }
        }
        ArrayList<Student> list = new ArrayList<>();
        while(true){
            showMenu();
            String choose = sc.next();
            switch (choose) {
                case "1" -> addStudent(list);
                case "2" -> removeStudent(list);
                case "3" -> updateStudent( list);
                case "4" -> showStudentInfo(list);
                case "5" -> {
                    System.out.println("退出");
                    System.exit(0);
                }
                default -> System.out.println("输入有误,请重新输入");
            }
        }
    }

    //显示界面
    public static void showMenu() {
        System.out.println("-------欢迎来到学生管理系统-------");
        System.out.println("1:添加学生");
        System.out.println("2:删除学生");
        System.out.println("3:修改学生");
        System.out.println("4:查询学生");
        System.out.println("5:退出");
        System.out.println("-----------------------------");
        System.out.println("请输入你的选择");
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("需要添加学生的数量");
        int count = sc.nextInt();
        for (int i = 0; i < count; i++) {
            System.out.println("输入学生id");
            String id = sc.next();
            System.out.println("输入学生姓名:");
            String name = sc.next();
            System.out.println("输入学生年龄:");
            int age = sc.nextInt();
            System.out.println("输入学生家庭住址:");
            String address = sc.next();
            Student s = new Student(id,name,age,address);
            list.add(s);
        }
        System.out.println("添加成功!");
    }

    //删除学生
    public static void removeStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要删除的学生id:");
        String id = sc.next();
        boolean flag = idIsExist(list,id);
        if(flag){
            int index = getIndex(list,id);
            list.remove(index);
            System.out.println("删除成功!");
        }
        else System.out.println("删除失败!,id不存在!");
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入要修改的学生id");
        String id = sc.next();
        int index = getIndex(list,id);
        if(index > -1){
            System.out.println("输入学生id");
            String sid = sc.next();
            list.get(index).setId(sid);
            System.out.println("输入学生姓名:");
            String name = sc.next();
            list.get(index).setName(name);
            System.out.println("输入学生年龄:");
            int age = sc.nextInt();
            list.get(index).setAge(age);
            System.out.println("输入学生家庭住址:");
            String address = sc.next();
            list.get(index).setAddress(address);
            System.out.println("修改成功!");
        }
        else System.out.println("修改失败!,id不存在!");
    }

    //查询学生
    public static void showStudentInfo(ArrayList<Student> list) {
        for (int i = 0; i < list.size(); i++) {
            list.get(i).showStudentInfo();
        }
    }

    //判断id是否存在
    public static boolean idIsExist(ArrayList<Student> list,String id){
        int index = getIndex(list,id);
        if(index > -1)return true;
        return false;
    }

    //返回id对应的索引
    public static int getIndex(ArrayList<Student> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getId().equals(id)){
                return i;
            }
        }
        return -1;
    }

    //显示登录界面
    public static void showLogin(){
        System.out.println("欢迎来到学生管理系统");
        System.out.println("请选择操作1登录 2注册 3忘记密码");
        System.out.println("请输入你的选择:");
    }

    //登录
    public static boolean login(ArrayList<User> userList){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.next();
        int index = getUserIndex(userList,username);
        if(index > -1){
            int count = 3;
            while (count != 0) {
                System.out.println("请输入密码");
                String password = sc.next();
                while (true) {
                    String num = getRandomNumber();
                    System.out.println("你的验证码为:" + num);
                    System.out.println("请输入验证码:");
                    String inputNum = sc.next();
                    if (num.equals(inputNum)) {
                        break;
                    } else System.out.println("验证码错误!请重新输入");
                }
                if(password.equals(userList.get(index).getPassword())){
                    System.out.println("登录成功!");
                    return true;
                }
                else {
                    count--;
                    System.out.println("密码错误!请重新登录");
                }
            }
            System.out.println("输入错误次数达到三次!无法继续输入");
            return false;
        }
        else System.out.println("登陆失败!用户名不存在,请注册后再来尝试!");
        return false;
    }

    //注册
    public static void register(ArrayList<User> userList){
        Scanner sc = new Scanner(System.in);
        String username , p1 ,idcard ,phoneNumber;
        while (true) {
            System.out.println("请输入您的用户名");
            username = sc.next();
            if(usernameIsTrue(userList,username)){
                break;
            }
            else System.out.println("创建失败!");
        }
        while (true) {
            System.out.println("请输入密码");
            p1 = sc.next();
            System.out.println("请确认密码");
            String p2 = sc.next();
            if(p1.equals(p2)){
                break;
            }
            else System.out.println("两次密码不一致!请重新输入");
        }
        while (true) {
            System.out.println("请输入身份证号");
            idcard = sc.next();
            if(idcardIsTrue(idcard)){
                break;
            }
            else System.out.println("身份证号不合法!请重新输入");
        }
        while (true) {
            System.out.println("请输入手机号");
            phoneNumber = sc.next();
            if(phoneNumberIsTrue(phoneNumber)){
                break;
            }
            else System.out.println("手机号不合法!请重新输入");
        }
        User newUser = new User(username,p1,idcard,phoneNumber);
        userList.add(newUser);
        System.out.println("注册成功!");
    }

    //忘记密码
    public static void setPassword(ArrayList<User> userList){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入用户名");
        String username = sc.next();
        int index = getUserIndex(userList,username);
        if(index != -1){
            System.out.println("输入您的身份证号");
            String idcard = sc.next();
            System.out.println("输入你的手机号");
            String phoneNumber = sc.next();
            if(userList.get(index).getIdCard().equals(idcard) && userList.get(index).getPhoneNumber().equals(phoneNumber)) {
                while (true) {
                    System.out.println("输入新的密码");
                    String newPassword = sc.next();
                    System.out.println("确认密码");
                    String p = sc.next();
                    if (newPassword.equals(p)){
                        userList.get(index).setPassword(p);
                        System.out.println("修改成功!");
                        break;
                    }
                    else System.out.println("两次输入密码不一致!请重新输入");
                }
            }
            else System.out.println("身份证号或手机号输入错误!");
        }
        else System.out.println("用户不存在!");
    }

    //判断身份证号码是否合法
    public static boolean idcardIsTrue(String idcard){
        if(idcard.length() != 18 || idcard.charAt(0) == '0')return false;
        if(idcard.charAt(17) != 'x' && idcard.charAt(17)!='X' && idcard.charAt(17) < '0' && idcard.charAt(17) > '9'){
            return false;
        }
        for (int i = 0; i < idcard.length() - 1; i++) {
            if(idcard.charAt(i) < '0' && idcard.charAt(i) > '9')return false;
        }
        return true;
    }

    //判断手机号是否合法
    public static boolean phoneNumberIsTrue(String phoneNumber){
       if(phoneNumber.length() != 11 || phoneNumber.charAt(0) == 0)return false;
        for (int i = 0; i < phoneNumber.length(); i++) {
            if(phoneNumber.charAt(i) < '0' || phoneNumber.charAt(i) > '9')return false;
        }
        return true;
    }

    //判断用户名是否合法
    public static boolean usernameIsTrue(ArrayList<User> userList,String username){
        if(username.length() < 3){
            System.out.println("用户名太短!");
            return false;
        }
        if(username.length() > 15){
            System.out.println("用户名太长!");
            return false;
        }
        if(getUserIndex(userList,username) != -1){
            System.out.println("用户名已存在!");
            return false;
        }
        boolean flag1 = false , flag2 = true;
        for (int i = 0; i < username.length(); i++) {
            if(username.charAt(i) >= 'a' && username.charAt(i) <= 'z')flag1 = true;
            if(username.charAt(i) < 48 || (username.charAt(i) > 57 && username.charAt(i)<64)
        ||(username.charAt(i)>90 && username.charAt(i) < 96)||username.charAt(i)>122){
                flag2 = false;
            }
        }
        if(flag1 && flag2) return true;
        else if(flag1) System.out.println("用户名含有不法字符!");
        else if(flag2) System.out.println("用户名不能全为数字!");
        return false;
    }

    //返回存在用户名对应的索引
    public static int getUserIndex(ArrayList<User> userList,String username){
        for (int i = 0; i < userList.size(); i++) {
            if(username.equals(userList.get(i).getUsername())){
                return i;
            }
        }
        return -1;
    }

    //生成随机验证码
    public static String getRandomNumber(){
        char[] ch = new char[52];
        for (int i = 0; i < ch.length; i++) {
            if(i <= 25){
                ch[i] = (char)('a' + i);
            }
            else{
                ch[i] = (char)('A' + i - 26);
            }
        }
        StringBuilder result  = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIndex = r.nextInt(ch.length);
            result.append(ch[randomIndex]);
        }
        int randomNum = r.nextInt(10);
        result.append(randomNum);
        int randomIndex = r.nextInt(5);
        StringBuilder ans = new StringBuilder();
        int i = 0,now = 0;
        while(ans.length() != 5){
            if(now != randomIndex){
                ans.append(result.charAt(i));
                i++;
                now++;
            }
            else{
                ans.append(randomNum);
                now++;
            }
        }
        return ans.toString();
    }
}



static

static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。
特点:

  • 被该类所有对象共享
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在

调用方式:

  • 类名调用(推荐)
  • 对象名调用

工具类

帮助我们做一些事情的,但是不描述任何事物的类

  • 类名见名知意
  • 私有化构造方法

一个工具类ArrayUtil

package me.JavaStudy;

public class ArrayUtil {
    private ArrayUtil() {
    }

    //打印数组
    public static void printArr(int[] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1)System.out.print(arr[i] + "]");
            else System.out.print(arr[i] + ", ");
        }
        System.out.println();
    }

    //求平均值
    public static double getAverage(double[] arr){
        double aver = 0.0;
        for (int i = 0; i < arr.length; i++) {
            aver += arr[i];
        }
        return aver/arr.length;
    }
}

继承

  • java提供一个关键字expense。用这个关键词可以让一个类和另一个类建立继承关系
    public class Student extends Person() {}
  • Stduent称为子类(派生类),Person称为父类(基类或者超类)

使用继承的好处

  • 可以把多个子类中重复的代码抽取到父类中了。提高代码的复用性

  • 子类可以在父类的基础上增加其他的功能,使子类更强大

  • java只支持单继承,不支持多继承,但支持多层继承

  • Java所有的类都直接或间接地继承object类

  • 子类只能访问父类中非私有的成员

子类到底能继承父类中的哪些内容

  1. 构造方法(非私有 不能 private 不能)
  2. 成员变量 (非私有 能 private 能)
  3. 成员方法(虚方法表 能 否则不能)
posted @ 2024-07-20 19:24  XYu1230  阅读(6)  评论(0编辑  收藏  举报