汉字编程——第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
这个作业的目标 汉字编程
作业正文 GitHub链接
其他参考文献 ...

记录

代码行数:274   326
需求分析时间:10分钟吧。。
编码时间:目前一天了    一天半
完整代码可以在Github查看,连接在上方

分解思路

首先

根据之后代码的需求写了类似几个这样的方法,这些方法都是在数字与字符串,数字与字符,字符串与数字之间的转换用的,以供主函数的调用

int setnum(String arr) {
        switch(arr) {
        case "零" :
            return 0;
        case "一" :
            return 1;
        case "二" :
            return 2;
        case "三" :
            return 3;
        case "四" :
            return 4;
        case "五" :
            return 5;
        case "六" :
            return 6;
        case "七" :
            return 7;
        case "八" :
            return 8;
        case "九" :
            return 9;
        case "十" :
            return 10;
        default :
            System.out.println("输入有误"); 
        }
        return 0;
    }
String Jsetnum(int d) {
        switch(d) {
        case 1 :
            return "十";
        case 2 :
            return "百";
        case 3 :
            return "千";
        case 4 :
            return "万";
        default :
            System.out.println("输入有误"); 
        }
        return null;
    }

然后

输入采用scanner

Scanner w = new Scanner(System.in);

主体都在循环中完成,
第一行是取得输入的汉字,
第二行利用正则将得到的汉字按空格分开存进数组
在最后因为写的是无线循环,所以在最后补了一个退出循环的条件

while (true) {
            String result = w.nextLine();// 取出输入的字符串
            String arr[] = result.split("\\s+");// 正则按空格匹配
。。。。。。
            if(arr[0].equals("esc"))
                break;
}

主体

这段主体现在已经可以实现:
汉字定义段:不限于正数十以内,目前只能实现一个定义(已完成,可以实现多个变量定义)
汉字运算段:不限于正数十以内
汉字输出段:不限于正数十以内
汉字如果判断段:正数十以内(需要的话可以再补充到十开外= =)

if (arr.length == 4) { // 识别定义
                if(arr[3].length()==1)//区别个位十位
                    wd = p.setnum(arr[3]);
                else if (arr[3].length() > 1) {
                    kk = "";
                    for (i = 0; i < arr[3].length(); i++) {
                        if (arr[3].charAt(0) == '负')
                            i++;
                        if (arr[3].charAt(i) == '十' || arr[3].charAt(i) == '百' || arr[3].charAt(i) == '千'
                                || arr[3].charAt(i) == '万') {
                            i++;
                            if (i == arr[3].length()) {
                                kk = kk + '0';
                                wd = Integer.parseInt(kk);
                                break;
                            }
                        }
                        kk = kk + p.Csetnum(arr[3].charAt(i));
                        wd = Integer.parseInt(kk);
                    }
                    if (arr[3].charAt(0) == '负')
                        wd = 0 - wd;
                }
            } 
            else if (arr.length == 3) { // 识别运算
                if (arr[2].length() == 1) {
                    if (arr[1].equals("增加")) {
                        wd = wd + p.setnum(arr[2]);
                    }
                    if (arr[1].equals("减少")) {
                        wd = wd - p.setnum(arr[2]);
                    }
                }
                else if(arr[2].length() > 1) {
                    kk = "";
                    for (i = 0; i < arr[2].length(); i++) {
                        if (arr[2].charAt(0) == '负')
                            i++;
                        if (arr[2].charAt(i) == '十' || arr[2].charAt(i) == '百' || arr[2].charAt(i) == '千'
                                || arr[2].charAt(i) == '万') {
                            i++;
                            if (i == arr[2].length()&&arr[2].charAt(i-1) == '十') {
                                kk = kk + '0';
                                t = Integer.parseInt(kk);
                                break;
                            }
                            if (i == arr[2].length()&&arr[2].charAt(i-1) == '百') {
                                kk = kk + "00";
                                t = Integer.parseInt(kk);
                                break;
                            }
                            if (i == arr[2].length()&&arr[2].charAt(i-1) == '千') {
                                kk = kk + "000";
                                t = Integer.parseInt(kk);
                                break;
                            }
                            if (i == arr[2].length()&&arr[2].charAt(i-1) == '万') {
                                kk = kk + "0000";
                                t = Integer.parseInt(kk);
                                break;
                            }
                        }
                        kk = kk + p.Csetnum(arr[2].charAt(i));
                        t = Integer.parseInt(kk);
                    }
                    if (arr[2].charAt(0) == '负')
                        t = 0 - t;
                    if (arr[1].equals("增加")) {
                        wd = wd + t;
                    }
                    if (arr[1].equals("减少")) {
                        wd = wd - t;
                    }
                }
            } 
            else if (arr.length == 2) {  //识别输出
                kk="";
                if(wd>=0&&wd<=10)//区别个位十位
                    System.out.println(p.Fsetnum(wd));
                else if(wd<0){
                    wd=0-wd;
                    System.out.print("负");
                    kk=String.valueOf(wd);
                    for (i = 0; i < kk.length(); i++) {
                        if(i!=0)//十百千万单位
                            System.out.print(p.Jsetnum(i));
                        System.out.print(p.Zsetnum(kk.charAt(i)));
                    }
                    wd=0-wd;
                    System.out.println();
                }
                else {//大于10
                    k=wd;
                    for(j=0;k!=0;j++)
                        k=k/10;
                    j--;
                    kk=String.valueOf(wd);
                    for (i = 0; i < kk.length(); i++) {
                        System.out.print(p.Zsetnum(kk.charAt(i)));
                        if(kk.charAt(i)=='0')//零后无单位,一百零五
                            j--;
                        if(j!=0) {//十百千万单位
                            System.out.print(p.Jsetnum(j));
                            j--;
                        }
                    }
                    System.out.println();
                }
            } 
            else if (arr.length == 10) {  //识别判断
                kk="";
                if (wd > p.setnum(arr[3])) {
                    for (i = 0; i < arr[6].length(); i++) {
                        if(arr[6].charAt(i)!='“' && arr[6].charAt(i)!='”')
                        kk = kk+arr[6].charAt(i);           
                    }
                    System.out.println(kk);
                } 
                else {
                    for (i = 0; i < arr[9].length(); i++) {
                        if(arr[9].charAt(i)!='“' && arr[9].charAt(i)!='”')
                        kk = kk+arr[9].charAt(i);           
                    }
                    System.out.println(kk);
                }
            }

测试

汉字编程——第一次个人编程作业_第1张图片
汉字编程——第一次个人编程作业_第2张图片
汉字编程——第一次个人编程作业_第3张图片

学习过程

通过百度查找,了解到字符串可以通过.split("\s+")的方式按空格分别读取,通过.charAt(i)可以一个个读取字符串里的字符

改进

汉字编程——第一次个人编程作业_第4张图片

因为样例2比原本的复杂做了一些小改进,大体的代码没有改变。
我在循环体里的头部加了两个标记数组(已用红色标出),
String brr[]= new String[10];//放置定义变量的数组,变量个数取决于数组大小
int crr[] = new int[10];//存放对应变量的数据
再用for循环去做变量的查重,如果brr数组没有相同的,那么标记符号f就等于1,将新变量存放进brr数组里,
这样就完成了多个变量的存放,然后每一个变量对应的值都存放在crr数组中,需要哪个变量就到crr数组寻找对应的值
for (f = 1, n = 0; n <= m; n++) {// 定义变量查重
if (f == 1) {//记录新的变量
主体代码都是对于新加的两个数组brr,crr,稍微进行的一些修改

            String result = w.nextLine();// 取出输入的字符串
            String arr[] = result.split("\\s+");// 正则按空格匹配
            String brr[]= new String[10];//放置定义变量的数组,变量个数取决于数组大小
            int crr[] = new int[10];//存放对应变量的数据
            if (arr.length == 4) { // 识别定义
                for (f = 1, n = 0; n <= m; n++) {// 定义变量查重
                    if (arr[1].equals(brr[n])) {
                        f = 0;
                        break;
                    }
                }
                if (f == 1) {//记录新的变量
                    brr[m] = arr[1];
                    m++;
                }
                if(arr[3].length()==1)//区别个位十位
                    wd = p.setnum(arr[3]);
                else if (arr[3].length() > 1) {
                    kk = "";
                    for (i = 0; i < arr[3].length(); i++) {
                        if (arr[3].charAt(0) == '负')
                            i++;
                        if (arr[3].charAt(i) == '十' || arr[3].charAt(i) == '百' || arr[3].charAt(i) == '千'
                                || arr[3].charAt(i) == '万') {
                            i++;
                            if (i == arr[3].length()) {
                                kk = kk + '0';
                                wd = Integer.parseInt(kk);
                                break;
                            }
                        }
                        kk = kk + p.Csetnum(arr[3].charAt(i));
                        wd = Integer.parseInt(kk);
                    }
                    if (arr[3].charAt(0) == '负')
                        wd = 0 - wd;
                }
                if(f==1) {//对应变量记录数据
                    crr[m]=wd;
                }
                else {
                    crr[n]=wd;
                }
            }

运行截图

汉字编程——第一次个人编程作业_第5张图片

你可能感兴趣的:(汉字编程——第一次个人编程作业)