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

来源:互联网 发布:剑灵天女捏脸数据图片 编辑:程序博客网 时间:2024/06/13 02:05

一、控制台扫描操作

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);// 取出以密码作为键的HashSetIterator<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 0
原创粉丝点击