黑马程序员技术交流社区
标题:
不用异常,做一个健壮性强硬的学生信息集合
[打印本页]
作者:
zhangyuren
时间:
2016-10-28 22:50
标题:
不用异常,做一个健壮性强硬的学生信息集合
package Test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//创建hashset集合,存储学生对象
HashSet<Person> hashSet = new HashSet<>();
//调用方法录入学生信息
setStudent(hashSet);
//调用方法去重
printOut(hashSet);
}
//录入学生成绩功能,内部含有学生的成员变量的判断,生成学生对象,加入hashSet
private static void setStudent(HashSet hashSet) {
// TODO Auto-generated method stub
//这里有了存储学生的集合hashSet
//需要解决的就是创建学生过程中信息正确的问题,增强健壮性,即不汇报任何异常
//不创建的条件是判断一个标志位0;
//设置不创建对象的标识变量setYorN
int setYorN = 0;
while(setYorN==0){
//提醒创建学生信息的方式
System.out.println("开始创建学生信息的了!");
System.out.println("请将中文姓名,年龄,成绩单独输入!");
System.out.println("-----------------------");
//创建三个成员变量
String name = null;
int age = 0;
double chengji = 0;
//创建纯字母字符集合arrEng,纯数字字符集合arrNum,其他字符集合arrOth,后面进行判断和操作要用
//创建纯字母字符集合arrEng
ArrayList<Character> arrEng = new ArrayList<>();
//将所有字母加入到纯字母字符集合
setArrEng(arrEng);
//创建纯数字字符集合arrNum
ArrayList<Character> arrNum = new ArrayList<>();
setArrNum(arrNum);
//创建其他字符集合arrOth
ArrayList<Character> arrOth = new ArrayList<>();
setArrOth(arrOth);
//录入姓名,只能是中文字符,不能有英文,不能有数字,不能其他字符,为此创建一个字母集合来判断交集,一个数字集合,一个其他字符集合
//如果直接回车,也就是输入为空,则要先判断下是否为空,提醒请输入名字,不要直接回车
/*思路有两个:
1,通过正则判断有没有特殊字符,正则表达式"[\\.^\\w]"
2,将其他字符创建一个集合*/
Scanner scanner3 = new Scanner(System.in);
while (true) {
System.out.println("请输入姓名");
String forname = scanner3.nextLine();
char[] charName = forname.toCharArray();
List list = new ArrayList();
for (int i = 0; i < charName.length; i++) {
list.add(charName[i]);
}
if (list.retainAll(arrEng)) {
if (list.retainAll(arrNum)) {
if (list.retainAll(arrOth)) {
name = forname;
break;
}else {
System.out.println("中文姓名不能包含其他字符!");
continue;
}
}else {
System.out.println("中文姓名不能包含数字!");
continue;
}
}else {
System.out.println("中文名字不能包含英文字母!");
continue;
}
}
//录入年龄
//转成字符数组,再转成集合后,与数子集合求交集,返回结果为集合不变,再判断.hasNextInt()
Scanner scanner5 = new Scanner(System.in);
while (true) {
System.out.println("请输入年龄:");
String nextLine = scanner5.nextLine();
char[] cha1 = nextLine.toCharArray();
List list = new ArrayList();
for (int i = 0; i < cha1.length; i++) {
list.add(cha1[i]);
}
if (list.retainAll(arrEng)) {
if (list.retainAll(arrOth)) {
if (scanner5.hasNextInt()) {
//写入age并break
age = new Integer(nextLine).intValue();
break;
}else {
System.out.println("学生年龄都是整数,形式不对");
continue;
}
}else {
System.out.println("包含了其他字符!不可以");
continue;
}
}else {
System.out.println("包含了英文字母!不可以");
continue;
}
}
//录入成绩,只能有double类型,如果不是.就提示格式错误,应该输入数字,判断条件.hasNextDouble
//这里还应该需要判断学生成绩的输入,如果有英文字符,有其他字符都不可以
Scanner scanner2 = new Scanner(System.in);
while (true) {
System.out.println("请输入成绩:");
if (scanner2.hasNextDouble()) {
chengji = scanner2.nextDouble();
break;
}else{
System.out.println("成绩录入不正确,请重新录入");
}
}
//创建对象
//对象录入集合
//控制不创建对象,通过控制变量结束循环
Person person = new Person(name, age, chengji);
hashSet.add(person);
System.out.println("该生信息已添加!");
Scanner scanner4 = new Scanner(System.in);
//控制结束语句的判断值
int i = 0;
while (i==0) {
System.out.println("继续创建对象吗?继续请输入1,不继续请按0");
if (scanner4.hasNextInt()) {
if (scanner4.nextInt()==0) {
setYorN=0;
i=1;
}
}else {
System.out.println("你的需求不对,请重新选择!");
}
}
}
}
private static void setArrOth(ArrayList<Character> arrOth) {
arrOth.add('!');
arrOth.add('~');
arrOth.add('`');
arrOth.add('@');
arrOth.add('#');
arrOth.add('$');
arrOth.add('%');
arrOth.add('^');
arrOth.add('&');
arrOth.add('*');
arrOth.add('(');
arrOth.add(')');
arrOth.add('-');
arrOth.add('_');
arrOth.add('+');
arrOth.add('=');
arrOth.add(':');
arrOth.add(';');
arrOth.add('"');
arrOth.add('\'');
arrOth.add('<');
arrOth.add('>');
arrOth.add(',');
arrOth.add('.');
arrOth.add('/');
arrOth.add('[');
arrOth.add(']');
arrOth.add('{');
arrOth.add('}');
arrOth.add('|');
arrOth.add('\\');
}
private static void setArrNum(ArrayList<Character> arrNum) {
for (int i = '0'; i <= '9'; i++) {
arrNum.add((char)i);
}
/*arrNum.add('0');
arrNum.add('1');
arrNum.add('2');
arrNum.add('3');
arrNum.add('4');
arrNum.add('5');
arrNum.add('6');
arrNum.add('7');
arrNum.add('8');
arrNum.add('9');*/
}
private static void setArrEng(ArrayList<Character> arrEng) {
for (int i = 'a'; i <= 'z'; i++) {
arrEng.add((char)i);
}
for (int i = 'A'; i <= 'Z'; i++) {
arrEng.add((char)i);
}
/*arrEng.add('b');
arrEng.add('c');
arrEng.add('d');
arrEng.add('e');
arrEng.add('f');
arrEng.add('g');
arrEng.add('h');
arrEng.add('i');
arrEng.add('j');
arrEng.add('k');
arrEng.add('l');
arrEng.add('m');
arrEng.add('n');
arrEng.add('o');
arrEng.add('p');
arrEng.add('q');
arrEng.add('r');
arrEng.add('s');
arrEng.add('t');
arrEng.add('u');
arrEng.add('v');
arrEng.add('w');
arrEng.add('x');
arrEng.add('y');
arrEng.add('z');
arrEng.add('A');
arrEng.add('B');
arrEng.add('C');
arrEng.add('D');
arrEng.add('E');
arrEng.add('F');
arrEng.add('G');
arrEng.add('H');
arrEng.add('I');
arrEng.add('J');
arrEng.add('K');
arrEng.add('L');
arrEng.add('M');
arrEng.add('N');
arrEng.add('O');
arrEng.add('P');
arrEng.add('Q');
arrEng.add('R');
arrEng.add('S');
arrEng.add('T');
arrEng.add('U');
arrEng.add('V');
arrEng.add('W');
arrEng.add('X');
arrEng.add('Y');
arrEng.add('Z');*/
}
//调用方法输出
private static void printOut(HashSet hashset) {
// TODO Auto-generated method stub
System.out.println(hashset);
}
}
作者:
peng84
时间:
2016-10-28 23:27
楼主好牛
作者:
wj2826
时间:
2016-10-28 23:55
666666学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2