黑马程序员技术交流社区

标题: 不用异常,做一个健壮性强硬的学生信息集合 [打印本页]

作者: 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