一、控制台扫描操作
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();
}
}
运行结果: