黑马程序员_JavaSE基础知识总结二十:课堂上关于集合的几个超经典案例(结课前集合知识温故)

这篇博客回顾了JavaSE集合知识,通过一个实例展示了如何使用数组存储学生信息,强调了如何从键盘接收输入并根据最高分查找学生详情。
摘要由CSDN通过智能技术生成

------ android培训java培训、期待与您交流! ----------


案例一:在学习集合之前,利用数组存储若干个学生信息,要求从键盘输入,并根据最高分提取学生信息。

<span style="font-size:18px;">import java.util.Scanner;

public class Demo {
	public static void main(String[] args) {
		
		//定义一个Student数组
		//格式:数据类型[] 数组名 = new 数据类型[长度];
		//格式:数据类型[] 数组名 = new 数据类型[]{值1,值2,....,值n};
		//格式:数据类型[] 数组名 = {值1,值2,....,值n};
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入学员数量:");
		int count = sc.nextInt();
		Student[] stuArray = new Student[count];

		for(int i = 0;i < stuArray.length ; i++){
			System.out.println("请输入第:" + (i + 1) + " 名学员信息:");
			System.out.println("姓名:");
			String name = sc.next();
			System.out.println("年龄:");
			int age = sc.nextInt();
			System.out.println("分数:");
			int score = sc.nextInt();
			
			//实例化一个Student对象
			Student stu = new Student(name,age,score);
			//将对象添加到数组
			stuArray[i] = stu;
		}
		
		
		
		//遍历数组
		for(int i = 0;i < stuArray.length ; i++){
			Student stu = stuArray[i];
			System.out.println(stu.name + "," + stu.age + "," + stu.score);
		}
		//找出分数最高的学员
		Student maxStudent = getMaxStudent(stuArray);
		System.out.println("最高分:" + maxStudent.score + " 姓名:" + maxStudent.name + ",年龄:" + maxStudent.age);
		//找出最低分学员
		
		
		//又想再存储1名学员信息
		
	}
	//定义一个方法,可以找出最高分学员
	//1.方法做什么事情:找出Student数组中的成绩最高的Student引用
	//2.是否需要外部数据:决定"形参";
	//3.方法做完事后,是否需要告诉调用者一个结果:决定"返回值"
	public static Student getMaxStudent(Student[] stuArr){
		//假设第一个学员是最高分
		Student maxStudent = stuArr[0];
		//遍历
		for(int i = 0; i < stuArr.length ; i++){
			if(stuArr[i].score > maxStudent.score){
				maxStudent = stuArr[i];
			}
		}
		return maxStudent;
	}
}

public class Student {
	String name;
	int age;
	int score;
	public Student(){
		
	}
	public Student(String name,int age,int score){
		this.name = name;
		this.age = age;
		this.score = score;
	}
}</span>


案例二:利用MVC分层思想,设计一个用户注册、登陆系统(MVC分层初步了解)
<span style="font-size:18px;">package cn.itcast.demo01_Main;

import cn.itcast.login.view.LoginView;

/*
 * 将"登录注册案例"分层实现:
 * 
 * 1.视图层(View):cn.itcast.login.view --> LoginView
 * 2.控制层(Controller):cn.itcast.login.controller --> LoginControl
 * 3.持久层:cn.itcast.login.dao --> UserDAO
 * 4.模型层(Model):cn.itcast.login.model --> UserModel
 * 
 * 类的制作流程:原则:先做"被依赖方",后做"依赖方"
 * 
 */
public class Demo {
	public static void main(String[] args) {
		//直接启动视图层
		new LoginView().showView();
	}
}

package cn.itcast.game;

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

/*
 * 猜数字小游戏:
 * 
 * 作业:完善下列程序,使程序在每次玩完后,能够列出菜单,询问用户是否继续玩,如果继续玩,可以再
 *     生成新的随机数并重新开始;否则程序退出;
 */
public class Game {
	public void start(){
		Scanner sc = new Scanner(System.in);
		//生成随机数对象
		Random rdm = new Random();
		//定义一个计数器
		int count = 0;
		//生成一个随机数(1--1000)
		int num = rdm.nextInt(1000) + 1;
		System.out.println("1--1000元的商品已经准备好,请开始!");
		while(true){
			System.out.println("请输入价格:");
			int value = sc.nextInt();
			count++;
			if(value > num){
				System.out.println("高了");
			}else if(value < num){
				System.out.println("低了");
			}else{
				System.out.println("恭喜你,猜中!!一共猜了:" + count + " 次!");
				break;
			}
		}
	}
}


package cn.itcast.login.controller;

import cn.itcast.login.dao.UserDAO;
import cn.itcast.login.model.UserModel;

public class UserControl {
	private UserDAO userDao = new UserDAO();
	//注册的方法,供"视图层"调用
	public int regist(UserModel m){//1.用户名格式不正确;2.密码格式不正确;3.用户名已经存在;4.注册成功;
		//验证用户名和密码
		String regex = "[0-9a-zA-Z]{6,16}";
		if(!m.getUserName().matches(regex)){
			return 1;
		}
		regex = "[0-9a-zA-Z]{6,10}";
		if(!m.getUserPwd().matches(regex)){
			return 2;
		}
		
		//调用持久层
		if(userDao.regist(m)){
			return 4;
		}else{
			return 3;
		}
	}
	//登录的方法
	public boolean login(UserModel m){
		//进行基本验证
		//略
		//调用持久层
		return this.userDao.login(m);
	}
	
}

package cn.itcast.login.dao;

import java.util.ArrayList;

import cn.itcast.login.model.UserModel;

public class UserDAO {
	//用ArrayList模拟数据库
	private ArrayList<UserModel> userList = new ArrayList<>();
	
	//注册的方法
	public boolean regist(UserModel m){
		//验证用户名是否存在
		for(UserModel user : this.userList){
			if(user.getUserName().equals(m.getUserName())){
				return false;//用户名已经存在
			}
		}
		//将参数存储到userList中
		userList.add(m);
		return true;
	}
	
	//登录的方法
	public boolean login(UserModel m){
		for(UserModel user : userList){
			if(user.getUserName().equals(m.getUserName()) &&
					user.getUserPwd().equals(m.getUserPwd())){
				return true;//找到
			}
		}
		return false;//没找到
	}
}

package cn.itcast.login.model;

public class UserModel {
	private String userName;
	private String userPwd;
	public UserModel() {
	}
	public UserModel(String userName, String userPwd) {
		this.userName = userName;
		this.userPwd = userPwd;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPwd() {
		return userPwd;
	}
	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}
}
package cn.itcast.login.view;

import java.util.Scanner;

import cn.itcast.game.Game;
import cn.itcast.login.controller.UserControl;
import cn.itcast.login.model.UserModel;


public class LoginView {
	private Scanner sc = new Scanner(System.in);
	//控制层对象
	private UserControl userControl = new UserControl();
	
	public void showView(){
		loop:
			while(true){
				System.out.println("(1).注册    (2).登录     (3).退出 :");
				if(!sc.hasNextInt()){
					sc = new Scanner(System.in);
					continue;
				}
				int op = sc.nextInt();
				switch(op){
					case 1://注册
						registUser();
						break;
					case 2://登录
						if(login()){
							//结束循环
							break loop;
						}
						break;
					case 3://退出
						System.out.println("谢谢使用,拜拜!!");
						return;//结束main()方法
					//	System.exit(0);//结束虚拟机
					default:
						System.out.println("请输入1--3的序号!");
						break;
				}
			}
	}
	//登录
	private boolean  login() {
		//引导用户
		System.out.println("请输入登录名:");
		String uName = sc.next();
		System.out.println("请输入密码:");
		String uPwd = sc.next();
		
		//交给"控制层"
		//封装数据模型
		UserModel m = new UserModel(uName,uPwd);
		if(this.userControl.login(m)){
			System.out.println("登录成功!");
			//后续的其它操作
			new Game().start();
			return true;
		}else{
			System.out.println("用户名或密码错误,请重新输入!");
			return false;
		}
		
	}

	//注册用户
	private  void registUser() {
		//引导用户
		System.out.println("请输入用户名:");
		String uName = sc.next();//要求6--16位数字、小写字母、大写字母的组合
		System.out.println("请输入密码:");
		String uPwd = sc.next();//要求6--10位数字、小写字母、大写字母的组合
		
		//交给"控制层"
		//先封装UserModel
		UserModel m = new UserModel(uName,uPwd);
		//传递给控制层;
		int op = userControl.regist(m);
		switch(op){
			case 1://用户名格式不正确
				System.out.println("用户名要求:6--16位数字、小写字母、大写字母的组合,请重新填写!");
				break;
			case 2://密码格式不正确
				System.out.println("密码要求:6--10位数字、小写字母、大写字母的组合,请重新填写!");
				break;
			case 3://用户名已经存在
				System.out.println("用户名:" + uName + " 已经存在!");
				break;
			case 4://注册成功
				System.out.println("注册成功!");
				break;
		}
	}
}
</span>


案例三:利用集合模拟斗地主的洗牌和发牌
<span style="font-size:18px;">package cn.itcast.demo20_练习_模拟斗地主的洗牌和发牌_将牌排序;

import java.util.ArrayList;
import java.util.Collections;
import java.util.TreeMap;
import java.util.TreeSet;

public class Demo {
	public static void main(String[] args) {
		//1.封装一副牌:
		String[] colors = {"♥","♠","♣","♦"};
		String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
		//准备集合TreeMap,封装:编号+牌面
		TreeMap<Integer,String> pokerMap = new TreeMap<>();
		//准备集合ArrayList,封装:编号
		ArrayList<Integer> indexList = new ArrayList<>();
		//遍历数组,封装牌面
		int index = 1;
		for(String n : nums){
			for(String c : colors){
				pokerMap.put(index, c + n);
				indexList.add(index);
				index++;
			}
		}
		pokerMap.put(index, "小王");
		indexList.add(index);
		index++;
		
		pokerMap.put(index, "大王");
		indexList.add(index);
		
		//洗牌--》洗编号
		Collections.shuffle(indexList);
		//发牌--》发编号
		TreeSet<Integer> user1Set = new TreeSet<>();
		TreeSet<Integer> user2Set = new TreeSet<>();
		TreeSet<Integer> user3Set = new TreeSet<>();
		TreeSet<Integer> dipaiSet = new TreeSet<>();
		for(int i = 0;i < indexList.size() ; i++){
			if(i >= indexList.size() - 3){
				dipaiSet.add(indexList.get(i));
			}else{
				if(i % 3 == 0){
					user1Set.add(indexList.get(i));
				}else if(i % 3 == 1){
					user2Set.add(indexList.get(i));
				}else if(i % 3 == 2){
					user3Set.add(indexList.get(i));
				}
			}
		}
		//看牌
		System.out.println("奥巴马:" + showPoker(user1Set,pokerMap));
		System.out.println("朴槿惠:" + showPoker(user2Set,pokerMap));
		System.out.println("金三胖:" + showPoker(user3Set,pokerMap));
		System.out.println("底牌:" + showPoker(dipaiSet,pokerMap));
		
	}
	
	public static String showPoker(TreeSet<Integer> userSet,TreeMap<Integer,String> map){
		StringBuffer buf = new StringBuffer("[");
		for(Integer index : userSet){
			buf.append(map.get(index)).append(", ");
		}
		buf.append("]");
		return buf.toString();
	}
}
</span>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值