記錄去大搜車的一道筆試題


     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 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底層的東西,垃圾回收和垃圾收集器等,集合的底層和擴容等。

  感覺和第一個面試官嘮了四五十分鍾把。但是到了第二個面試官,上了就問我不是計算機專業的?我本身是土木工程的(本科),我實話實說。后來的嘮嗑感覺面試官都快睡着了,感覺我說的東西他也沒聽多少。第二天 大搜車發來了郵件給我婉拒了。

  整個面試分析下來,兩點:

  1、自己的有點知識掌握不牢靠、不全面、不深入。但是認為我跟計算機專業的畢業相同時間的人比 ,我不輸很多。

  2、感覺自己輸在了專業上,假如計算機專業畢業是加分項,我這不是的 不是零分而是負數。但是不能一直失落,要越挫越勇,再沉淀下,之后自己要用更多時間學習,來彌補專業問題。

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM