面向对象高级训练(2道简单的题目)

面向对象高级训练

1、试题:
假设用户账号为:admin,密码为 123,编写用户登陆案例。 要求:请将登陆定义为 login 方法, 并将 login 方法写在 UserService 类中。
思路:

1、封装账号密码两个属性

class UserService{
	private String account_number;//账号
	private String password;//密码
	
	public String getAccount_number() {
		return account_number;
	}
	public void setAccount_number(String account_number) {
		this.account_number = account_number;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

2、创建登陆方法

	public void login() {//登录方法
		Scanner input1 = new Scanner(System.in);//获取账号
		System.out.println("请输入账号:");
		this.account_number = input1.next();
		Scanner input2 = new Scanner(System.in);//获取密码
		System.out.println("请输入密码:");
		this.password = input2.next();

3、判断是否登录成功

		if(this.account_number.equals("admin") && this.password.equals("123")) {//判断账号密码是否正确
			System.out.println("登陆成功");
		}else {
			System.out.println("您输入的密码有误,请重新输入");
			login();//输入错误递归直至输入正确
		}

2、 试题:
设置一个类, 命名为 MyList
类中包含属性:Object[] element
方法有如下几个:

  1. 增加方法 add : 可以向数组属性中依次存储 Object,数组内容
    存满时,需实现动态扩容(详解在下面)。
  2. 删除方法 remove :可以根据数据或下标,从数组属性中删除
    Object 数据,删除后,数组后续元素需前移。
  3. 查询方法 get :方法传入下标,返回数组中指定下标的数据。
    当前存储数据量 size : 获取当前存储的有效数据长度
    动态扩容详解:无需真正增加原数组的容量,只用将原内容复制到新
    的大数组,然后让原数组名称重新等于大数组即可。由于原数组数据在堆中,
    失去引用会被 GC 自动回收。
    思路:
    1、add方法
	public static int size = 0;
	Object[] element = new Object[10];//创建element数组
	public void add(Object o){//创建add方法
		element[size] = o;//依次存储数据
		size++;
		if(size >= element.length) {//当超出数组长度进行扩容
			int y = size + 5;//每次增加5个长度
			Object[] nums = new Object[y];//创建新数组
			for(int i = 0;i < size;i++) {
				nums[i] = element[i];//将数据给到新数组
			}
			element = nums;//将新数组更名为element
			System.out.println("扩容已完成,当前数据量:" + element.length);
		}
	}

2、remove方法(下标删除数据)

	public static int size = 0;
	Object[] element = new Object[10];//创建element数组
	public void add(Object o){//创建add方法
		element[size] = o;//依次存储数据
		size++;
		if(size >= element.length) {//当超出数组长度进行扩容
			int y = size + 5;//每次增加5个长度
			Object[] nums = new Object[y];//创建新数组
			for(int i = 0;i < size;i++) {
				nums[i] = element[i];//将数据给到新数组
			}
			element = nums;//将新数组更名为element
			System.out.println("扩容已完成,当前数据量:" + element.length);
		}
	}

3、remove方法(直接输入数据删除)

	public void remove2() {
		Scanner input = new Scanner(System.in);//获取用户想要删除的数据
		System.out.println("请输入你要删除的数据:");
		String a = input.next();
		int d = 0;//此数据用来判断是否执行了删除操作
		for(int b = 0;b < element.length;b++) {//遍历数组找出要删除的数据
			if(a.equals(element[b])) {//找到要删除的数据
				for(int i = b + 1;i < element.length;i++) {//将后面的数据覆盖要删除的数据
					element[b] = element[i];
					b++;
				}
				System.out.println("已删除");
				d = 1;//当d==1时说明执行了删除操作
			}
		}
		if(d != 1) {//判断是否执行了删除操作
			System.out.println("你输入的数据不在范围内,请重新输入");
			remove2();
		}
	}

4、get方法

	public void get(){
		Scanner input = new Scanner(System.in);
		System.out.println("请输入你要查询的数的下标:");
		int n = input.nextInt();
		if(n < element.length) {//判断查询的下标是否超出范围
			System.out.println("你要查询的数据是:" + element[n]);
		}else {
			System.out.println("你输入的下标超出范围,请重新输入");
			get();//超出范围重新输入
		}
		
	}

结论:相较于知识点的记忆,逻辑思路尤为重要。

你可能感兴趣的:(面向对象高级训练(2道简单的题目))