一、项目检查
*、用户注册功能(需求:在控制台输入用户名和密码,经检测以后,若成功,则输出:**注册成功。

public class Mesage {
    public String name;
    public String passWord1;
    public String passWord2;
    public  Mesage(){}
    public  Mesage(String name){
        this.name = name;
    }
    public Mesage(String passWord1,String passWord2){
        this.passWord1 = passWord1;
        this.passWord2 = passWord2;
    }
}

public interface Rule {
    //用户名检查是否合法
     boolean inputName(String name);
     //两次输入的密码是否一致
     boolean inputPass(String Password1,String Password2);
}
import Homework1.User;
import org.junit.Assert;
import org.junit.Test;

public class TestUser {
    User user = new User();
    @Test
    public void Test_Name1(){
        String userName = "zhangsan123";
        boolean a1 = user.inputName(userName);
        Assert.assertEquals("用户名不合法",false,a1);
    }
    @Test
    public void Test_Name2(){
        String userName = "123ZhangSan";
        boolean a1 = user.inputName(userName);
        Assert.assertEquals("用户名不合法",false,a1);
    }
    @Test
    public void Test_Name3(){
        String userName = "Zhang1San@#";
        boolean a1 = user.inputName(userName);
        Assert.assertEquals("用户名不合法",false,a1);
    }
    @Test
    public void Test_Name4(){
        String userName = "Zhang1San2";
        boolean a1 = user.inputName(userName);
        Assert.assertEquals("用户名不合法",true,a1);
    }
    @Test
    public void Test_PassWord1(){
        String b2 = "123456";
        String b3 = "123456";
        boolean b1 = user.inputPass(b2,b3);
        Assert.assertEquals("用户名不合法",true,b1);
    }
    @Test
    public void Test_PassWord2(){
        String b2 = "123456x";
        String b3 = "123456y";
        boolean b1 = user.inputPass(b2,b3);
        Assert.assertEquals("用户名不合法",false,b1);
    }
    @Test
    public void Test_PassWord3(){
        String b2 = "123";
        String b3 = "123456";
        boolean b1 = user.inputPass(b2,b3);
        Assert.assertEquals("用户名不合法",false,b1);
    }
}

public class User extends Mesage implements Rule{
//用户名检查
public boolean inputName(String name){ boolean check = false; char[] a=name.toCharArray(); if ((Character.isUpperCase(a[0])||Character.isLowerCase(a[0]))){ for (int i=1;i<a.length;i++){ if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'||a[i]>='0'&&a[i]<='9'){ check = true; } else { check = false; } } } if (check){ for (int j=1;j<a.length;j++){ if (a[j]>='a'&&a[j]<='z'){ check = false; }else if (a[j]>='A'&&a[j]<='Z'){ check = true ; break ; }else if(a[j]>='0'&&a[j]<='9'){ continue; } } } if (check){ for (int j=1;j<a.length;j++){ if (a[j]>='A'&&a[j]<='Z'){ check = false; }else if (a[j]>='a'&&a[j]<='z'){ check = true ; break; }else if(a[j]>='0'&&a[j]<='9'){ continue; } } } return check; }
//密码检查
public boolean inputPass(String Password1,String Password2){ boolean check = false; if (Password1.equals(Password2)){ check = true; }else { check = false; } return check; } } public class Start { public static void main(String[] args) { User obc = new User(); Scanner input = new Scanner(System.in); System.out.println("》 》 》用户注册入口《 《 《"); System.out.println("规则:用户名开头必须是字母,必须含有大小写字母,可以有数字,不可以有其它特殊字符"); System.out.print("请输入用户名:"); obc.name = input.next(); while (!obc.inputName(obc.name)) { System.out.print("请重新输入用户名:"); obc.name = input.next(); } System.out.print("请输入密码:"); obc.passWord1 = input.next(); System.out.print("请再次确认密码:"); obc.passWord2 = input.next(); while (!obc.inputPass(obc.passWord1, obc.passWord2)){ System.out.println("两次输入密码不正确!"); System.out.print("请重新输入密码:"); obc.passWord1 = input.next(); System.out.print("请再次确认密码:"); obc.passWord2 = input.next(); } System.out.println("恭喜你,注册成功!"); } }

 


二、范型回顾:


1.范型1-数组回顾及优缺点

数组的特点:
1、属于引用数据类型。
2、只能保存同一种数据类型。
3、数组的长度一旦分配不可改变。
优点:可高效运行。
缺点:无法直接删除和增加元素。

2.范型2-ArrayList的使用及缺点分析

操作:
1、定义ArrayList对象
2、增加10,20,30三个元素。
3、修改第一个元素为100
4、删除最后一个元素
5、遍历所有元素,在增加100后输出。

说明:
1、list1目前的数据类型其实是0bject,
所以10和"abc"都可以加。
2、而在计算时,默认当作int数据类型来进行处理的。
3、"abc"无法被强转为int类型,所以出现错误:
...String cannot be cast to class Integer.


3.范型3-入门-用范型解决隐患问题

范型:
1、概念:将数据类型作为可以变化的“参数",就是"范型"。
2、先定义:<数据类型占位符>
3、后使用:在使用时只能是"引用"数据类型。
如:对于集合类(如ArrayList),如果没有指定范型,则默认为<0bject>。

小结:
1、范型定义就是写在<>中的一个占位符,通常是一个大写字母。
习惯上常用字母:E、T、K、V。
2、范型的使用是指在定义容器类(如ArrayList)时指定
具体的引用数据类型,如: Integer。

范型概念
Java 泛型(generics)是JDK 5中引入的一个新特性,
2、泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
3、泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。
这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
回顾:
1、范型定义:ArrayList<E>,其中字母E可自定义。
2、范型使用:ArrayList<Integer>。在使用时动态指定引用数据类型。
范型作用:
1、保证了类型的安全性。
说明:没有泛型,则容器中可以加入任何数据类型的元素,不安全。
2、避免强制转换
说明:消除源代码中的许多强制类型转换,减少了出错机会
3、提升性能
说明:避免了不必要的装箱、拆箱操作,提高程序的性能
4、提高了代码的重用性。
说明:没有范型,就要在定义类使用各种具体的数据类型。

4.范型4-定义-范型类

语法:public class 类名<字母>

5.范型5-定义-范型方法

1、在定义方法时,先定义范型参数并马上用在返回值或形参中。
这样的方法的就是范型方法。
2、范型方法与所在类是否为范型类无关。
范型:将数据类型作为可以变化的“参数",就是“范型"。
三种语法:
1、: <T> void方法名(T变量名)
2、:<T> T 方法名()
3、:<T> T 方法名(T 变量名)
说明:为简化描述,用T代表范型类型,下同。

6.范型6-定义-范型接口

范型接口:指在接口定义时指定范型。

定义
public interface Ishow<T> {
void show(T value);{}

7.范型7-通配符1-问号

1、List<?>就声明了List中包含的元素类型是未知的。
通配符所代表的其实是"一种数据类型",但具体的类型是未知的。
2、ListList<?>并不等同于List<0bject>。
List<0bject>集合中可以包含任何"多种数据类型"的元素。


8.范型8-通配符2-问号extends类

语法: List<? extends类>
作用:限定只能是某个类或者这个类子类呢。
List<? extends类>:
限制条件理解

1、可以接受的集合的数据类型为该类类型
2、或者为该类的子类类型

9.范型9-通配符3-问号super类

语法: List<?super类>
作用:限定只能是某个类或者这个类的"父类"

10.范型10-通配符4-问号extends接口

语法: List<?extends 接口>
作用:限定只能是某个接口

 

posted on 2022-05-30 08:43  心疼武大郎  阅读(70)  评论(0)    收藏  举报