java編程題java
實現一個字符串數字轉人民幣的小功能c++
入參:一個字符串,範圍是0.00~999999.99,最多兩位小數面試
出參:對應的人民幣大寫或者驗證不合法編程
例子1:數組
input:12345.67app
output:壹萬貳仟叄佰肆拾伍元陸角柒分jvm
例子2:學習
input:1000000spa
output:輸入值超出範圍code
例子3
input:133a055
output:輸入的值不是數字
說明一下:當時個人思路是:
(1)根據小數點分割,而後獲取到小數點左邊的整數位,和右邊的小數位。
(2)而後各自根據空格分割,獲取到整數位數組和小數位數組。
(3)整數位數組進行從右到左的遍歷,這樣能夠拼接單位(如:元、拾、佰..)
(4)小數位從左到右遍歷,好處如(3)
(5)在三、4遍歷過程當中須要把對應的數字轉換成大寫中文
遺憾:當時整個思路是這樣的,可是手寫代碼仍是不如本身用電腦方便,易改。筆試過程當中由於本身寫的 例子二、例子3 不符規則的代碼 寫多了,把位置都佔了,不得已說了一下個人思路。不過當時在第三步寫的有一點問題。下面有我錯誤想法的代碼。不過我認爲整個的思路是沒問題的。後來回家後本身電腦敲了一波(下面不符規則的代碼就不寫了)。
1 public static String 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=new StringBuffer(); 16 for (int i = str2.length-1; i >=0 ; i--) { 17 sb=new StringBuffer(); 18 //這裏是獲取int數字轉換成中文數字 19 for (int y=0;y<chinese.length;y++){ 20 System.out.println(str2[i]); 21 if(chinese[y].startsWith(str2[i])){ 22 System.out.println(chinese[y]); 23 sb.append(chinese[y].split(",")[1]); 24 break; 25 } 26 } 27 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=new StringBuffer(); 51 for (int y=0;y<chinese.length;y++){ 52 if(chinese[y].startsWith(str3[i])){ 53 System.out.println(chinese[y]); 54 sb.append(chinese[y].split(",")[1]); 55 break; 56 } 57 } 58 switch (i){ 59 case 0: sb.append("角") ;break; 60 case 1: sb.append("分");break; 61 } 62 //這裏單純是爲了查看 其實能夠省略此步驟 63 str3[i]=sb.toString(); 64 newsb.append(str3[i]); 65 } 66 67 System.out.println(newsb.toString()); 68 return newsb.toString(); 69 }
最後說一下整個面試:
整個面試感受說了不少,可是也有一部分沒回答上來。問的東西很簡單。以前看了不少jvm底層的東西,垃圾回收和垃圾收集器等,集合的底層和擴容等。
感受和第一個面試官嘮了四五十分鐘把。可是到了第二個面試官,上了就問我不是計算機專業的?我自己是土木工程的(本科),我實話實說。後來的嘮嗑感受面試官都快睡着了,感受我說的東西他也沒聽多少。次日 大搜車發來了郵件給我婉拒了。
整個面試分析下來,兩點:
一、本身的有點知識掌握不牢靠、不全面、不深刻。可是認爲我跟計算機專業的畢業相同時間的人比 ,我不輸不少。
二、感受本身輸在了專業上,假如計算機專業畢業是加分項,我這不是的 不是零分而是負數。可是不能一直失落,要越挫越勇,再沉澱下,以後本身要用更多時間學習,來彌補專業問題。