Java字符串实验报告

【任务一】:创建一个 DoubleConverter 类,该类的作用是将一个字符串转换成浮点型(double)数值
要求: 1 DoubleConverter 具有一个属性,double result;
2 DoubleConverter 具有一个方法 boolean convert(String value);
2.1 该方法将参数字符串转换为整数。
2.2 转换若成功,则返回值为 true,并且转换的值存在 result 属性中。
2.3 若转换失败,则返回值为 false,并将 result 属性的值赋 0。
3 设计一个测试类来测试 DoubleConverter。
3.1 当测试类开始运行时,要求用户从键盘输入一个字符串,然后调用 DoubleConverter 的方法将字符串转换成为一个浮点型的数值。
3.2 当用户输入的字符串不是浮点数时,则提示“你输入的不是浮点数。”,并要求重新输入。
3.3 若用户输入的是浮点数,则打印该值的内容,最后退出程序。
提示:
把 DoubleConverter 类应在放在合适的包中。
当你不确定什么数能够转换成功时,可以参考 Double 类的 parseDouble()方法的结果。 3. 不能直接使用 Java 内置的 Double 类的 parseDouble()方法和 Scanner 类的 nextDouble()方法将整个字符串转换为整数,而必须读取用户输入的字符串提取每一个字符挨个转换为数字。

import java.util.Scanner;

public class DoubleConverterTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String org = input.next();
        while (!isFloat(org)) {
            System.out.println("error");
            org = input.next();
        }
        boolean isSuccess;
        DoubleConverter doubleConverter = new DoubleConverter();
        isSuccess = doubleConverter.convert(org);
        if (isSuccess){
            System.out.println("The result is:"+ doubleConverter.result);
        }
    }

    public static boolean isFloat(String org){
        char charArray[] = org.toCharArray();
        int figureNum = 0;
        int pointNum = 0;
        for(int i = 0;i < org.length();i++){
            if(charArray[i] == '.'){
                pointNum++;
            }
            if(charArray[i] <= '9' && charArray[i] >= '0'){
                figureNum++;
            }
            if(pointNum == 1 && figureNum + pointNum == org.length()){
                return true;
            }
        }
        return false;
    }
}

public class DoubleConverter {
    double result = 0;
    public boolean convert(String org){
        int pointPosition = org.indexOf('.');
        pointPosition--;
        for(int i = 0;i < org.length();i++){
            if(org.charAt(i) == '.') continue;
            result = result + Math.pow(10,pointPosition)* Integer.parseInt(String.valueOf(org.charAt(i)));
            pointPosition--;

        }
        return  true;
    }
}

【任务二】:完成用户注册和登录功能。
要求:
1 必须在实验一的基础上扩展,必须具备实验一中任务二的所有功能。
2 对于实验一中实现的一级菜单:
登录系统;
系统设置;
写日记;
查找日记;
退出系统;
请选择:
3 当用户选择除了菜单项 1 外的任何菜单,则提示“用户未登录,请先登录。”然后直接返回菜单。
4 当用户选择菜单项 1 时,提示二级菜单:
注册;
登录;
找回密码;
返回上一层菜单;
请选择:
5 当用户选择 1. 注册;功能时,
5.1 提示用户依次输入:用户名、显示名、密码、确认密码、邮箱等数据。
5.2 用户名只能包含字母、数字和下划线,并且首字母只能为字母,用户名最短不能少于 6 个字符,最长不能超过 20 个字符。
5.3 显示名可以包含任意字符,但是最小只能为 3 个字符,最长可以为 20 个字符。
5.4 用户密码必须包含字母数字和特殊符号,密码最短为 8 位,最长不能超过 30 位;密码和确认密码必须相同。
5.5 邮箱必须符合邮箱格式,最常不能超过 50 个字符。
5.6 提示用户从 5 个密码提示问题中选择一个,并填写答案,答案不能为空。
5.7 最后生成一个简单的 3 个整数的四则运算,例如[3 * 9-2=?],并要求用户回答。如果用户回答正确,则用户注册过程成功。如果用户回答错误,则更新问题,并让用户重新输入,直到输入正确为止,或者用户输入错误超过 5 次。
5.8 由于未使用具体的数据库,注册成功后,将所有数据存放在数组中,然后输出数组的设置。例如,如果用户注册后是第三个用户 , 则用户名存储为 : username[2]=”zhangsan” , 用 户 名 存 储 为
password[2]=”#zsma123456#”等等,则输出:
username[2]=”zhangsan”;
password[2]=”#zsma123456#”;
……
然后将输出复制回代码当中。
5.9 注册完成后,直接返回登录二级菜单。
6 当用户选择 2. 登录;功能时,
6.1 提示用户输入用户名和密码。判断用户输入的用户名和密码的字符数是否满足需求,否则提示用户重新输入。
6.2 如果用户输入的用户名和密码正确,则登录成功。
6.3 最后直接返回一级菜单,并且,一级菜单的第一个菜单项变为(高亮部分):
[显示名]退出登录;
系统设置;
写日记;
查找日记;
退出系统;
请选择:
7 当用户登录成功后,选择任意菜单,则提示“正在执行某功能……”,完成后返回一级菜单。
8 当用户选择一级菜单当中的 1. [显示名]退出登录;功能时,则退出用户登录,并将菜单项还原。此时若用户再选择任意功能,继续提示“用户未登录,请先登录。”
9 当用户选择二级菜单中 3. 找回密码;功能时,
9.1 提示用户在 5 个密码提示问题中选择一个。
9.2 然后提示用户输入密码提示问题答案。
9.3 如果答案和用户注册时填写的一致,则提示用户输入新的密码和确认密码。
9.4 如果密码和确认密码合法,则输出输出密码更新代码,例如:
password[2]=”#zhangsan123#”;
然后将输出复制回代码中。
9.5 最后回到二级登录菜单。
提示:
密码输入时可以使用明文输入。如果想使用*代替密码字符,则可以使用 Console 类。但是 Console 类不兼容 Eclipse输入框,可以在 Windows 自带的控制台测试。
不能在任何用户输入错误时直接退出程序,必须等待用户选择退出功能时退出。
注意包、类、变量的命名。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Login {
    public static String[] userNameArray = new String[100] ;
    public static String[] screenNameArray = new String[100];
    public static String[] passwordArray = new String[100];
    public static String[] emailAddressArray = new String[100];
    public static String[] answerArray = new String[100];
    public static int userCount = 0;
    public static void main(String[] args){
        mainMenue();
    }
    public static void mainMenue () {
        Scanner input = new Scanner(System.in);
        System.out.println("1.系统登陆");
        System.out.println("2.系统设置");
        System.out.println("3.写日记");
        System.out.println("4.查找日记");
        System.out.println("5.退出系统");
        System.out.println("请选择:");
        int option = input.nextInt();
        while (!(option >= 1 && option <= 5)) {
            System.out.println("Input Error,input again");
            option = input.nextInt();
        }
        switch (option) {
            case 1:
                loginMenue();
                break;
            case 2:
            case 3:
            case 4:
                System.out.println("用户未登录,请先登录");
                break;
            case 5:
                System.out.println("谢谢使用,再见!");
                System.exit(0);
                break;
        }
    }

    public static void loginMenue(){
        System.out.println("1.注册");
        System.out.println("2.登录");
        System.out.println("3.找回密码");
        System.out.println("4.返回上一级菜单");
        System.out.println("请选择:");
        Scanner input = new Scanner(System.in);
        int option = input.nextInt();
        switch(option) {
            case 1:
                System.out.println("请输入用户名:");
                String username = input.next();
                while (!usernameIsRight(username)) {
                    System.out.println("请重新输入用户名:");
                    username = input.next();
                }
                userNameArray[userCount] = username;
                System.out.println("请输入显示名:");
                String screenName = input.next();
                while (!screenNameIsRight(screenName)){
                    System.out.println("请重新输入显示名:");
                    screenName = input.next();
                }
                screenNameArray[userCount] = screenName;
                System.out.println("请输入密码:");
                String password = input.next();
                while (!passwordIsRight(password)){
                    System.out.println("请重新输入密码:");
                    password = input.next();
                }
                passwordArray[userCount] = password;
                System.out.println("请确认密码:");
                String confirmPassword = input.next();
                while (!confirmPasswordIsRight(password,confirmPassword)){
                    System.out.println("请重新输入确认密码:");
                    confirmPassword = input.next();
                }
                System.out.println("请输入邮箱:");
                String mailAddress = input.next();
                while (!mailAddressIsRight(mailAddress)){
                    System.out.println("请重新输入邮箱:");
                    mailAddress = input.next();
                }
                emailAddressArray[userCount] = mailAddress;
                System.out.println("请选择密码提示问题:");
                System.out.println("1.Q1");
                System.out.println("2.Q2");
                System.out.println("3.Q3");
                System.out.println("4.Q4");
                System.out.println("5.Q5");
                int choice = input.nextInt();
                System.out.println("请回答密码提示问题:");
                String answer = input.next();
                while (!answerIsRight(answer)){
                    System.out.println("请重新回答密码提示问题:");
                    answer = input.next();
                }
                answerArray[userCount] = answer;
                System.out.println("请作答:5*3-6=");
                int result = input.nextInt();
                if(result == 9) System.out.println("注册成功!");
                else{
                    System.out.println("请作答:5*4-6=");
                    result = input.nextInt();
                    if(result == 14) System.out.println("注册成功!");
                    else{
                        System.out.println("请作答:1*4+2=");
                        result = input.nextInt();
                        if(result ==6) System.out.println("注册成功!");
                        else{
                            System.out.println("请作答:8/4+3=");
                            result = input.nextInt();
                            if(result == 5) System.out.println("注册成功!");
                            else{
                                System.out.println("请作答:9/3-6=");
                                result = input.nextInt();
                                if(result == -3) {
                                    System.out.println("注册成功!");
                                }
                                else{
                                    System.out.println("注册失败!");
                                }
                            }
                        }
                    }
                }
                userCount++;
                loginMenue();
                break;
            case 2:
                System.out.println("请输入用户名:");
                username = input.next();
                while (!usernameIsRight(username)) {
                    System.out.println("请重新输入用户名:");
                    username = input.next();
                }
                System.out.println("请输入密码:");
                password = input.next();
                while (!passwordIsRight(password)){
                    System.out.println("请重新输入密码:");
                    password = input.next();
                }
                if(checkInformation(username,password)){
                    logoutMenue(username);
                }
                break;
            case  3:
                System.out.println("请选择密码提示问题:");
                System.out.println("1.Q1");
                System.out.println("2.Q2");
                System.out.println("3.Q3");
                System.out.println("4.Q4");
                System.out.println("5.Q5");
                choice = input.nextInt();
                System.out.println("请输入密码提示问题答案:");
                answer = input.next();
                if(answer.equals(answerArray[userCount-1])){
                    System.out.println("请输入新密码:");
                    password = input.next();
                    while (!passwordIsRight(password)){
                        System.out.println("请重新输入新密码:");
                        password = input.next();
                    }
                    System.out.println("请确认密码:");
                    confirmPassword = input.next();
                    while (!confirmPasswordIsRight(password,confirmPassword)){
                        System.out.println("请重新输入确认密码:");
                        confirmPassword = input.next();
                    }
                    passwordArray[userCount-1] = password;
                }
                loginMenue();
                break;
        }
    }

    public static void logoutMenue(String username){
        Scanner input = new Scanner(System.in);
        int option;
        System.out.println("1.[" + username + "]" + "退出登录" );
        System.out.println("2.系统设置");
        System.out.println("3.写日记");
        System.out.println("4.查找日记");
        System.out.println("5.退出系统");
        System.out.println("请选择:");
        option = input.nextInt();
        switch (option){
            case 1:
                loginMenue();
                break;
            case 2:
                System.out.println("正在执行系统设置功能");
                logoutMenue(username);
                break;
            case 3:
                System.out.println("正在执行写日记功能");
                logoutMenue(username);
                break;
            case 4:
                System.out.println("正在执行查找日记功能");
                logoutMenue(username);
                break;
            case 5:
                System.out.println("正在退出系统功能");
                logoutMenue(username);
                break;
        }

    }

    public static void secondMenue () {
        System.out.println("1.按标题查找");
        System.out.println("2.按内容查找");
        System.out.println("3.按日期查找");
        System.out.println("4.按心情查找");
        System.out.println("5.按天气查找");
        System.out.println("6.返回上一层菜单");
        System.out.println("请选择:");
        Scanner input = new Scanner(System.in);
        int option = input.nextInt();
        while (!(option >= 1 && option <= 6)) {
            System.out.println("Input Error,input again");
            option = input.nextInt();
        }
        switch (option) {
            case 1:
                System.out.println("正在执行按标题查找功能");
                break;
            case 2:
                System.out.println("正在执行按内容查找功能");
                break;
            case 3:
                System.out.println("正在执行按日期查找功能");
                break;
            case 4:
                System.out.println("正在执行按心情查找功能");
                break;
            case 5:
                System.out.println("正在执行按天气查找功能");
                break;
            case 6:
                mainMenue();
                break;
        }
    }

    public static boolean usernameIsRight(String username){
        if(!(username.charAt(0) >= 'A' && username.charAt(0) <= 'z')){
            return false;
        }
        if(!(username.length() >=6 && username.length() <= 20)){
            return false;
        }
        for(int i = 0;i < username.length();i++){
            if(!((username.charAt(i) >= '0' && username.charAt(i) <= '9') || (username.charAt(i) >= 'A' && username.charAt(i) <= 'z') || username.charAt(i) == '_')){
                return false;
            }
        }
        return true;
    }

    public static boolean screenNameIsRight(String screenName){
        if(!(screenName.length() >= 3 && screenName.length() <= 20)){
            return false;
        }
        return true;
    }

    public static boolean passwordIsRight(String password){
        boolean hasFigure = false;
        boolean hasLetter = false;
        boolean hasFix = false;
        if(!(password.length() >= 8 && password.length() <= 30)){
            return false;
        }
        for (int i = 0;i < password.length();i++){
            if(password.charAt(i) <= '9' && password.charAt(i) >= '0') hasFigure = true;
            if(password.charAt(i) <= 'z' && password.charAt(i) >= 'A') hasLetter = true;
            if(password.charAt(i) == '!' || password.charAt(i) == '@' || password.charAt(i) == '#' || password.charAt(i) == '$' || password.charAt(i) == '%' || password.charAt(i) == '*' || password.charAt(i) == '^' ){
                hasFix = true;
            }
            if (hasFigure && hasFix && hasLetter){
                return true;
            }
        }
        return false;
    }

    public static boolean confirmPasswordIsRight(String password,String confirmPassword){
        return password.equals(confirmPassword);
    }

    public static boolean mailAddressIsRight(String mailAddress){
        if (mailAddress == null)
            return false;
        if(!(mailAddress.length() <= 50)){
            return false;
        }
        String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        Pattern p;
        Matcher m;
        p = Pattern.compile(regEx1);
        m = p.matcher(mailAddress);
        if (m.matches())
            return true;
        else
            return false;
    }

    public static boolean answerIsRight(String answer){
        if (answer == null){
            return false;
        }
        else{
            return true;
        }
    }

    public static boolean checkInformation(String username,String password){
        for(int i = 0;i < userCount;i++){
            if(userNameArray[i].equals(username)){
                if(passwordArray[i].equals(password)){
                    return true;
                }
            }
        }
        return false;

    }
}

以上实验代码由某L姓大牛独家赞助播出,✿✿ヽ(°▽°)ノ✿撒花撒花
我现在看到这些代码就想骂人,coding一时爽,我现在看就是HZC!立个flag(反正也会倒 我一定要好好儿把这些又长又臭的代码写成函数!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,719评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,364评论 0 5
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,351评论 0 17
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,161评论 0 9
  • 吃货地图产品需求文档 V1.0-2015/03/30 1概述 1.1产品概述及目标 概述:“吃货地图”是一款基于i...
    michaelshan阅读 5,824评论 1 46