zoukankan      html  css  js  c++  java
  • 汉字编程——第一次个人编程作业

    这个作业属于哪个课程 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);
    				}
    			}
    

    测试



    学习过程

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

    改进

    因为样例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;
                    }
                }
    

    运行截图

  • 相关阅读:
    背包问题--动态规划
    day03_13 多分支if语句及作业
    day03_12 缩进介绍
    day03_11 if语句实现猜年龄01
    day03_10 注释及简单的用户输入输出
    day03_09 编码部分历史及文件编码简介
    day03_07 变量的重新赋值01
    day03_06 变量详解
    day03_05 Python程序文件执行和与其他编程语言对比
    day03_04 文件后缀及系统环境变量
  • 原文地址:https://www.cnblogs.com/mbx1206832820/p/12270981.html
Copyright © 2011-2022 走看看