java编程题
实现一个字符串数字转人民币的小功能
入参:一个字符串,范围是0.00~999999.99,最多两位小数
出参:对应的人民币大写或者验证不合法
例子1:
input:12345.67
output:壹万贰仟叁佰肆拾伍元陆角柒分
例子2:
input:1000000
output:输入值超出范围
例子3
input:133a055
output:输入的值不是数字
说明一下:当时我的思路是:
(1)根据小数点分割,然后获取到小数点左边的整数位,和右边的小数位。
(2)然后各自根据空格分割,获取到整数位数组和小数位数组。
(3)整数位数组进行从右到左的遍历,这样可以拼接单位(如:元、拾、佰..)
(4)小数位从左到右遍历,好处如(3)
(5)在3、4遍历过程中需要把对应的数字转换成大写中文
遗憾:当时整个思路是这样的,但是手写代码还是不如自己用电脑方便,易改。笔试过程中因为自己写的 例子2、例子3 不符规则的代码 写多了,把位置都占了,不得已说了一下我的思路。不过当时在第三步写的有一点问题。下面有我错误想法的代码。不过我认为整个的思路是没问题的。后来回家后自己电脑敲了一波(下面不符规则的代码就不写了)。
1 public staticString transfer(String num){2 num="12345.67";3
4 String[] chinese={"0,零","1,壹","2,贰","3,叁","4,肆","5,伍","6,陆","7,柒","8,捌","9,玖"};5 //此处根据小数点分割
6 String[] str1= num.split("\\.");7 //这里是根据空格拆分的整数数组
8 String[] str2= str1[0].split("");9 //这里是根据空格拆分的小数数组
10 String[] str3= str1[1].split("");11 //这里的c 是整数位用来累加遍历次数 以获取到 单位的(元,拾...)12 //13 int c=0;14 StringBuffer sb;15 StringBuffer newsb=newStringBuffer();16 for (int i = str2.length-1; i >=0 ; i--) {17 sb=newStringBuffer();18 //这里是获取int数字转换成中文数字
19 for (int y=0;y
28 //这里当时的错误想法是这里,switch里面的是(str2[i]).29 //笔试后面试官说这里有问题,但是后来已经面试完了,我才想起怎么去解决这个问题。大写的尴尬。。。
30 switch(c){31 case 0: sb.append("元");break;32 case 1: sb.append("拾");break;33 case 2: sb.append("佰");break;34 case 3: sb.append("仟");break;35 case 4: sb.append("万");break;36 //case 5: sb.append("拾万");break;37 //case 6: sb.append("百万");break;
38 }39 //整数数组位 替换成数字+单位
40 str2[i]=sb.toString();41 c++;42 }43 //这里需要把整数数组从左到右 进行拼接显示
44 for (int i = 0; i < str2.length; i++) {45 newsb.append(str2[i]);46 }47
48 //小数位从左到右拼接
49 for (int i =0; i < str3.length ; i++) {50 sb=newStringBuffer();51 for (int y=0;y
63 str3[i]=sb.toString();64 newsb.append(str3[i]);65 }66
67 System.out.println(newsb.toString());68 returnnewsb.toString();69 }
最后说一下整个面试:
整个面试感觉说了很多,但是也有一部分没回答上来。问的东西很简单。之前看了很多jvm底层的东西,垃圾回收和垃圾收集器等,集合的底层和扩容等。
感觉和第一个面试官唠了四五十分钟把。但是到了第二个面试官,上了就问我不是计算机专业的?我本身是土木工程的(本科),我实话实说。后来的唠嗑感觉面试官都快睡着了,感觉我说的东西他也没听多少。第二天 大搜车发来了邮件给我婉拒了。
整个面试分析下来,两点:
1、自己的有点知识掌握不牢靠、不全面、不深入。但是认为我跟计算机专业的毕业相同时间的人比 ,我不输很多。
2、感觉自己输在了专业上,假如计算机专业毕业是加分项,我这不是的 不是零分而是负数。但是不能一直失落,要越挫越勇,再沉淀下,之后自己要用更多时间学习,来弥补专业问题。