Java基础学习之集合框架分析和和控制台输入登录注册

一、控制台扫描操作

Scanner:扫描器,用于从控制台扫面数据到内容,属于java.util包下的

例子:

需求:实现一个加法操作的函数,加数和被加数必须要键盘动态输入,而不是在代码中直接写

package com.test.exercise5;

import java.util.Scanner;

public class Add {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner scanner = new Scanner(System.in);
		while (true) {
			System.out.println("请输入一个加数:");
			int a = scanner.nextInt();
			System.out.println("请输入一个被加数:");
			int b = scanner.nextInt();
			int result = a + b;
			System.out.println(a + "+" + b + "=" + result);
		}
	}

}
结果


二、集合框架

分类:三大框架(List、Set、Map)

1、List(队列)

1)继承父类:Collection

2)常用的实现类:ArrayList、LinkedList及其他

3)特点:有序的、可重复的、有指定索引的

2、Set(集合)

1)继承父类:Collection

2)常用的实现类:HashSet、TreeSet

3)特点:无序的、不可重复的、没有指定索引的

4)如何获取集合中的元素?通过迭代!

例子:

package com.test.exercise5;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		set.add("aa");
		set.add("cd");
		set.add("ew");

		set.add("aa");// 集合中已经有了该元素,就返回false,不代替原来的元素
		Iterator<String> tor = set.iterator();// 迭代器,返回在此 set 中的元素上进行迭代的迭代器。
		while (tor.hasNext()) {
			System.out.println(tor.next());
		}
	}

}

3、Map

1)存储方式:键值对的存储

2)子类:HashMap、TreeMap

3)特点:(1)键值对的方式存储,一条数据由两个部分组成(键和值)

                 (2)键的内容不能重复,值的内容可以重复

                 (3)键和值存储的内容都可以为null

4)如何取Map中的元素?通过迭代!

5)最常用的业务场景:用户信息的存储

用户登录信息:用户名 -  密码

例子:

package com.test.exercise5;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String key = "姓名";
		String value = "李四";
		String key2 = "年龄";
		String value2 = "12";

		Map<String, String> map = new HashMap<String, String>();
		map.put(key, value);
		map.put(key2, value2);

		Set<String> set = map.keySet();// 获取键的Set显示
		Iterator<String> tor = set.iterator();
		while (tor.hasNext()) {
			String str = tor.next();
			System.out.println(str);
			String string = map.get(str);
			System.out.println(string);
		}
	}

}
结果


三、应用实例

案例1实现用户的登陆注册,

通过控制台来实现

需求流程:

1、控制条打印提示用户选择操作流程:1登陆  2表示注册

2、如果用户选择的是1

a) 提示用户输入用户名,并扫描到输入的用户名

b) 提示用户输入密码,并扫描等到输入的密码

c) map集合中匹配是否有合适的用户名密码数据内容

d) 如果有,则打印登陆成功,如果没有则提示登陆失败

3、如果用户选择的是2

a) 提示用户输入用户名,并扫描到输入的用户名

b) 提示用户输入密码,并扫描等到输入的密码

c) 验证用户名是否存在

d) 如果不存在,则把用户名和密码存入map中,并答应注册成功

e) 如果存在,直接打印注册失败

 代码实现:

package com.test.login;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Login {
	Scanner scanner = new Scanner(System.in);
	Map<String, String> map = new HashMap<String, String>();
	public String b;
	public String c;
	public String a;

	/*
	 * 提示用户输入1或者2
	 */
	public void loginInt() {
		System.out.println("请用户输入1.登录或者2.注册: ");
		a = scanner.next();
		if (a.contains("1") || a.contains("登录")) {
			this.userName();
			this.passWord();
			this.register();
		} else if (a.contains("2") || a.contains("注册")) {
			this.userName();
			this.passWord();
			this.registerTraverse();
		} else {
			System.out.println("您的输入有误!请重新输入");
			this.loginInt();
		}
	}

	/*
	 * 提示用户输入用户名
	 */
	public void userName() {
		System.out.println("请您输入您的用户名:");
		b = scanner.next();
	}

	/*
	 * 提示输入密码
	 */
	public void passWord() {
		System.out.println("请您输入您的密码:");
		c = scanner.next();
	}

	/*
	 * 比对Map中是否有这个键值对
	 */
	public void register() {
		Set<String> set1 = map.keySet();// 返回键
		Iterator<String> tor1 = set1.iterator();// 迭代器
		if (!tor1.hasNext()) {// 表为空
			System.out.println("表为空,登录失败");
			this.loginInt();
		} else {// 表不为空
			while (tor1.hasNext()) {
				String key1 = tor1.next();// 取出键
				if (key1.equals(b)) {// 有这个用户名
					String value1 = map.get(key1);// 得到值
					if (c.equals(value1)) {// 密码相同
						System.out.println("登录成功");
						this.loginInt();
					} else if (!c.equals(value1)) {// 密码不同
						System.out.println("密码错误,登录失败!请重新输入密码");
						// 重新输入密码
						this.passWord();
						this.register();
					}
				} else {// 没有这个用户名
					System.out.println("用户名不存在,登录失败");
					this.loginInt();
				}
			}
		}

	}

	public void registerTraverse() {
		Set<String> set2 = map.keySet();// 返回键
		Iterator<String> tor2 = set2.iterator();// 迭代器
		// 登录表为空
		if (!tor2.hasNext()) {
			map.put(b, c);// 放到map中
			System.out.println("表为空,注册成功");
			this.loginInt();
		} else {// 登录表不为空
			while (tor2.hasNext()) {
				String key2 = tor2.next();// 取出键
				if (key2.equals(b)) {// 表中该键存在
					System.out.println("该用户名已经存在,注册失败!请重新注册");
					this.loginInt();
				} else {// 表中该键不存在
					map.put(b, c);// 放入表中
					System.out.println("注册成功");
					this.loginInt();
				}
			}
		}

	}

}
package com.test.login;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Login().loginInt();
	}

}
运行结果:




案例2用户注册的信息进行升级

添加的功能:注册的时候,还需要注册用户的:年龄、性别、电话、邮箱

代码实现:

package com.test.login1;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Login {
	Scanner scanner = new Scanner(System.in);
	public String a, b, c, d, e, f, g;
	Map<String, HashMap<String, HashSet<String>>> map = new HashMap<String, HashMap<String, HashSet<String>>>();
	Set<String> k = new HashSet<String>();
	public String[] string = { "用户名", "性别", "电话", "邮箱", "年龄" };

	/**
	 * 登录或者注册显示
	 */
	public void login() {
		System.out.println("请用户输入:1.登录或者2.注册");
		a = scanner.next();
		if (a.contains("1") || a.contains("登录")) {
			this.userName();
			this.Password();
			this.traverse();
		} else if (a.contains("2") || a.contains("注册")) {
			this.userName();
			this.Password();
			this.age();
			this.sex();
			this.mailBox();
			this.phone();
			this.registerTraverse();
		} else {
			System.out.println("您的输入有误!请重新输入");
			this.login();
		}
	}

	/**
	 * 输入用户名
	 */
	public void userName() {
		System.out.println("请输入您的用户名");
		b = scanner.next();
	}

	/**
	 * 输入密码
	 */
	public void Password() {
		System.out.println("请输入您的密码");
		c = scanner.next();
	}

	/**
	 * 输入年龄
	 */
	public void age() {
		System.out.println("请输入您的年龄 ");
		d = scanner.next();
	}

	/**
	 * 输入性别
	 */
	public void sex() {
		System.out.println("请输入您的性别 ");
		e = scanner.next();
	}

	/**
	 * 输入电话
	 */
	public void phone() {
		System.out.println("请输入您的电话 ");
		f = scanner.next();
	}

	/**
	 * 输入邮箱
	 */
	public void mailBox() {
		System.out.println("请输入您的邮箱 ");
		g = scanner.next();
	}

	/**
	 * 登录遍历
	 */
	public void traverse() {
		Set<String> set = map.keySet();// 返回用户名键的Set<String>图
		Iterator<String> tor = set.iterator();// 迭代器
		// 表为空
		if (!tor.hasNext()) {
			System.out.println("没有任何用户,登录失败!请重新选择");
			this.login();
		} else {
			// 遍历取内容
			while (tor.hasNext()) {
				String str = tor.next();// 取出用户名
				// 用户名不存在
				if (!b.equals(str)) {
					System.out.println("没有这个用户名,登录失败!请重新选择");
					this.login();
				} else {
					HashMap<String, HashSet<String>> value = map.get(str);// 取出HashMap(含有密码的)
					Set<String> key2 = value.keySet();// 返回密码的Set<String>图
					Iterator<String> tor2 = key2.iterator();// 迭代器
					while (tor2.hasNext()) {
						String mima = tor2.next();// 取到密码(键)
						// 判断密码的正误
						if (!c.equals(mima)) {
							System.out.println("密码错误,请重新输入");
							this.Password();
							this.traverse();
						} else {
							System.out.println("登录成功!");
							for (int i = 0; i < string.length; i++) {
								System.out.print(string[i] + "  ");
							}
							System.out.println();
							System.out.print(b + "  ");
							HashSet<String> hash = value.get(mima);// 取出以密码作为键的HashSet
							Iterator<String> tor3 = hash.iterator();// 迭代器
							while (tor3.hasNext()) {
								System.out.print(tor3.next() + "  ");
							}
							System.out.println();
							this.login();
						}
					}

				}

			}
		}

	}

	/**
	 * 注册遍历
	 */
	public void registerTraverse() {
		Set<String> set = map.keySet();// 返回用户名键的Set<String>图
		Iterator<String> tor = set.iterator();// 迭代器
		// 表为空
		if (!tor.hasNext()) {
			HashSet<String> hash = new HashSet<String>();
			hash.add(d);
			hash.add(e);
			hash.add(f);
			hash.add(g);
			HashMap<String, HashSet<String>> hash2 = new HashMap<String, HashSet<String>>();
			hash2.put(c, hash);
			map.put(b, hash2);
			System.out.println("表为空,注册成功");
			this.login();
		} else {
			// 遍历
			while (tor.hasNext()) {
				String yongHu = tor.next();
				if (b.equals(yongHu)) {
					System.out.println("该用户已存在,请重新选择");
					this.login();
				} else {
					HashSet<String> hash = new HashSet<String>();
					hash.add(d);
					hash.add(e);
					hash.add(f);
					hash.add(g);
					HashMap<String, HashSet<String>> hash2 = new HashMap<String, HashSet<String>>();
					hash2.put(c, hash);
					map.put(b, hash2);
					System.out.println("表不为空,注册成功");
					this.login();
				}
			}

		}
	}

}
package com.test.login1;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Login().login();
	}

}
运行结果:




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值