面向对象 数组

1、引用数据类型数组在语法上和基本数据类型数组是没有区别的。
2、 先给数组元素产生对象,然后赋值.否则会产生产生空指针异常.
3、用法和普通数组是一样的,但里面放的是引用 对象.
4、声明与定义 Student [] stuarr = new Student[5];
Student–>对象类型的数据类型
stuarr -->对象数组的名字
5–>数组的长度

	/*
	 * 1、引用数据类型数组在语法上和基本数据类型数组是没有区别的。
	 */
	int[] arr = new int[4];

	// 产生一个存放5个学生信息的数组,每个元素可以存放一个学生对象。但是每个元素现在都只是null
	StudentBean[] stuArr = new StudentBean[5];

	for (int i = 0; i < stuArr.length; i++) {
		System.out.println("输入第" + (i + 1) + "个学生姓名:");
		String name = new Scanner(System.in).next();
		System.out.println("输入第" + (i + 1) + "个学生年龄:");
		int age = new Scanner(System.in).nextInt();

// stuArr[i].setName(name);//产生空指针异常
// stuArr[i].setAge(age);

		stuArr[i] = new StudentBean(name, age);//先给数组元素产生对象,然后赋值
				
	}
	
	
	//题1:找出年龄最大的学生
	StudentBean maxStudent = stuArr[0];
	for (int i = 0; i < stuArr.length; i++) {
		if (maxStudent.getAge() < stuArr[i].getAge()) {
			maxStudent = stuArr[i];
		}
	}
	System.out.println("最大学生是:"+maxStudent.getName());
	System.out.println("他的年龄是"+maxStudent.getAge());
	
	
	
	//题2:用户在指定位置加入一个StudentBean对象
	System.out.println("你要添加在第几个?----");
	int index = new Scanner(System.in).nextInt();
	
	System.out.println("输入添加的学生姓名:");
	String name = new Scanner(System.in).next();
	System.out.println("输入添加的学生年龄:");
	int age = new Scanner(System.in).nextInt();

	StudentBean[] newStuArr = new StudentBean[stuArr.length+1];

//法1:
// for(int i = 0;i<index -1;i++) {
// newStuArr[i] = stuArr[i];
// }
// newStuArr[index-1] = new StudentBean(name, age);
// for(int i = index ; i<newStuArr.length;i++) {
// newStuArr[i] = stuArr[i-1];
// }

	//法2:
	System.arraycopy(stuArr, 0, newStuArr, 0, index -1);
	newStuArr[index-1] = new StudentBean(name, age);
	System.arraycopy(stuArr, index-1, newStuArr, index, newStuArr.length-index);
	
	stuArr = newStuArr;	
	for (int i = 0; i < stuArr.length; i++) {
		System.out.println(stuArr[i].getName()+ "  " +stuArr[i].getAge());
	}

//题3:用户删除指定位置的StudentBean对象。删除后,要求剩余对象连续。
System.out.println(“你要删除第几个学生?----”);

	 index = new Scanner(System.in).nextInt();		
	System.arraycopy(stuArr, index, stuArr, index-1, stuArr.length-index);		
	newStuArr = new StudentBean[stuArr.length-1];
	System.arraycopy(stuArr, 0, newStuArr, 0, stuArr.length -1);
	stuArr = newStuArr;//垃圾回收
	for (int i = 0; i < stuArr.length; i++) {
		System.out.println(stuArr[i].getName()+ "  " +stuArr[i].getAge());
	}	

/*

  • 匹配一个用户数组中的卡号和密码
    * 产生一个长度为5的UserInfo数组,放入5个用户
    * 用户名:j170 — j174
    * 密码:1234560 — 1234564
    * 3次登录机会,登录成功,显示账户余额,否则吞卡
    *
    */

    UserInfo[] allUsers = new UserInfo[5];
    for (int i = 0; i < allUsers.length; i++) {
    	allUsers[i] = new UserInfo("j17"+i, "123456"+i, 1000+i*100);
    }
    
    //记录登录成功的当前用户
    UserInfo theUser = null;
    
    for (int i = 0; i < 3; i++) {
    	// 输入用户名密码
    	System.out.println("请输入用户名:");
    	String inputName = new Scanner(System.in).next();
    	System.out.println("请输入密码:");
    	String inputPwd = new Scanner(System.in).next();
    	
    	for (int j = 0; j < allUsers.length; j++) {
    		if (allUsers[j].getName().equals(inputName)&&allUsers[j].getPassword().equals(inputPwd)) {
    			theUser = allUsers[j];
    			break;
    		}
    	}
    	
    	if (theUser == null) {
    		System.out.println("账户密码有误");
    	}else {
    		break;
    	}
    	
    }
    
    if (theUser != null) {
    	System.out.println("你的当前余额为:" + theUser.getMoney());
    }else {
    	System.out.println("吞卡");
    }
    
发布了14 篇原创文章 · 获赞 4 · 访问量 723

猜你喜欢

转载自blog.csdn.net/qq_40852762/article/details/101707705