A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© AndroidM 中级黑马   /  2015-7-25 23:55  /  6695 人查看  /  63 人回复  /   7 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 AndroidM 于 2015-7-25 23:54 编辑
最近,刚搞完Android的入学面试,把遇到了一些有价值的面试题分享下吧,  :lol

1 , 金额转换,阿拉伯数字转换成中国传统形式。
* 例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
  1. public class Test1 {
  2.     public static void main(String[] args) {
  3.         //测试如下
  4.         System.out.println(changeNum("1234"));
  5.         System.out.println(changeNum("12340123"));
  6.         System.out.println(changeNum("90123410011001"));
  7.         System.out.println(changeNum("101000001010"));
  8.         System.out.println(changeNum("90123400001010"));
  9.         //测试异常
  10.     //    System.out.println(changeNum("90123400001010A"));  
  11.     }
  12.     //完成金额转换方法的定义
  13.     public static String changeNum(String str){
  14.         if(str==null || !str.matches("[0-9]+")){
  15.             throw new RuntimeException("字符串为空或含有非阿拉伯数字");
  16.         }
  17.         String[] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  18.         String[]  arr = {"拾","佰","仟","萬","亿"};
  19.         StringBuilder sb = new StringBuilder();
  20.         //处理万位以下数目
  21.         if(str.length()<5){
  22.             for(int i=str.length() - 1; i >=0;i--){
  23.                 char c  = str.charAt(i);
  24.                 int k = Integer.parseInt(c+"");
  25.                 if(k==0 || i == str.length() - 1){
  26.                     if( k==0 && i==str.length() -1)
  27.                         ;
  28.                     else
  29.                         sb.insert(0, num[k]);
  30.                 }else{
  31.                     sb.insert(0, num[k]+arr[str.length() - i -2]);
  32.                 }
  33.             }
  34.         }
  35.         else{
  36.             //处理亿位以下数目,通过递归 分别处理 万位 及万位以下数据
  37.             if(str.length() < 9){
  38.                 int k = str.length() - 4;
  39.                 String f = changeNum(str.substring(0,k));
  40.                 if(f.equals("零")||f.equals("零圆整"))
  41.                     sb.append(f+changeNum(str.substring(k,str.length())));
  42.                 else
  43.                     sb.append(f+arr[3]+changeNum(str.substring(k,str.length())));
  44.             }else{
  45.                 if(str.length() > 8){
  46.                     int k = str.length() - 8;
  47.                     sb.append(changeNum(str.substring(0,k))+arr[4]+changeNum(str.substring(k,str.length())));
  48.                 }
  49.             }
  50.         }
  51.         //处理字符串中的多零情况,并返回
  52.         return sb.toString().replaceAll("[零]+", "零").replaceAll("[圆整]", "")+"圆整";
  53.     }
  54. }
复制代码
输出答案:
  1. 壹仟贰佰叁拾肆圆整
  2. 壹仟贰佰叁拾肆萬零壹佰贰拾叁圆整
  3. 玖拾萬壹仟贰佰叁拾肆亿壹仟零壹萬壹仟零壹圆整
  4. 壹仟零壹拾亿零壹仟零壹拾圆整
  5. 玖拾萬壹仟贰佰叁拾肆亿零壹仟零壹拾圆整
复制代码

2、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2 ,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;

  4. public class Test2 {
  5.         public static void main(String[] args) throws IOException {
  6.                 System.out.println(Integer.MAX_VALUE);
  7.                 System.out.println(Integer.MIN_VALUE);
  8.                 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  9.                 String line = in.readLine();
  10.                 if(checkDigital(line))
  11.                         throw new RuntimeException("转换错误,含有非数字字符");
  12.                 try{
  13.                         int value  = Integer.parseInt(line);
  14.                         String binary = toBinary(value);
  15.                         System.out.println("right :      :" + Integer.toBinaryString(value));
  16.                         System.out.println("my result :"+binary);
  17.                 }catch (Exception e) {
  18.                         throw new RuntimeException("转换错误,数字过大");
  19.                 }
  20.         }
  21.         private static String toBinary(int value) {
  22.                 StringBuilder sb = new StringBuilder();
  23.                 int y = 0;
  24.                 while(value != 0 ){
  25.                         y = value % 2;
  26.                         value = value/2;
  27.                         sb.insert(0, y);
  28.                 }
  29.                 return sb.toString();
  30.         }
  31.         private static boolean checkDigital(String line) {
  32.                 char[] cs = line.toCharArray();
  33.                 for(char c : cs){
  34.                         if(!Character.isDigit(c)){
  35.                                 return true;
  36.                         }
  37.                 }
  38.                 return false;
  39.         }
  40. }
复制代码

3、 方法中的内部类能不能访问方法中的局部变量,为什么?
这道题可能很多人都和我一样,只知其然,而不知道其所以然, 推荐 看这个帖子,讲的非常好:http://www.cnblogs.com/dolphin0520/p/3811445.html

  答:  可以訪問, 但是必須是用final修飾的局部变量, 因為在內部類中使用的局部變量是外部方法內變量的一個拷貝,
     是編譯器在創建內部類時自動傳給內部類的,為了防止內部類中變量與方法中變量出現數據不一致的情況,所以使用
      的变量必須要用final修飾。

4、 编写程序,生成5个1至10之间的随机整数,存入一个List集合,

     * 编写方法对List集合进行排序(自定义排序算法,禁用Collections.sort方法和TreeSet),然后遍历集合输出。
  1. public class Test4 {
  2.         public static void main(String[] args) throws IOException {
  3.                 List<Integer> list = new ArrayList<Integer>();
  4.                 for(int i=0; i<5; i++)
  5.                         list.add(new Random().nextInt(10));
  6.                 System.out.println(list);
  7.                 //sortMaopao(list);
  8.                 //sortChoose(list);
  9.                 sortInsert(list);
  10.         }
  11. }
  12. //插入排序
  13.         private void sortInsert(List<Integer> list) {
  14.                 for(int i=1; i<list.size(); i++){
  15.                         int j;
  16.                         int temp = list.get(i);
  17.                         for( j=i; j>0&& temp <list.get(j-1) ; j--){
  18.                                 list.set(j, list.get(j-1));
  19.                         }
  20.                         list.set(j, temp);
  21.                 }
  22.                 System.out.println(list);
  23.         }
  24. //选择排序
  25.         private void sortChoose(List<Integer> list) {
  26.                 for(int i=0; i<list.size(); i++){
  27.                         for(int j=i+1; j<list.size(); j++){
  28.                                 if(list.get(i)>list.get(j)){
  29.                                         int temp = list.get(i);
  30.                                         list.set(i, list.get(j));
  31.                                         list.set(j, temp);
  32.                                 }
  33.                         }
  34.                 }
  35.                 System.out.println(list);
  36.         }
  37. //冒泡排序
  38.         private void sortMaopao(List<Integer> list) {
  39.                 for(int i=1; i<list.size(); i++){
  40.                         for(int j=0; j<list.size()-i; j++){
  41.                                 if(list.get(j)>list.get(j+1)){
  42.                                         int temp = list.get(j);
  43.                                         list.set(j, list.get(j+1));
  44.                                         list.set(j+1, temp);
  45.                                 }
  46.                         }
  47.                 }
  48.                 System.out.println(list);
  49.         }
  50. }
复制代码



63 个回复

倒序浏览
先看一下,谢谢分享。
回复 使用道具 举报
谢谢分享,我也到了这一步,感觉有的知识不太扎实,一边复习一边看题
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
收藏了.
回复 使用道具 举报
感觉好难啊
回复 使用道具 举报
好难看不懂...
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
挺好的,很有用
回复 使用道具 举报
谢谢分享!!
回复 使用道具 举报
不错   学习了
回复 使用道具 举报
好东西和搜藏了
回复 使用道具 举报
Claw 中级黑马 2015-7-27 23:17:36
13#
还是有点难度的
回复 使用道具 举报
rxtm 中级黑马 2015-7-27 23:31:35
14#
怎么感觉都这么难
回复 使用道具 举报
rxtm 发表于 2015-7-27 23:31
怎么感觉都这么难

我是选的里面稍难的,拿出来分享的,所以不要灰心哈
回复 使用道具 举报
请问 有多少题   有时间限制吗  还有需要做对 多少题
回复 使用道具 举报
谢谢,我这也马上就要入学测试了
回复 使用道具 举报
就喜欢这种分享帖,楼主好人
回复 使用道具 举报
xch184415359 来自手机 中级黑马 2015-7-28 12:14:50
19#
看不懂:Q:Q:Q
回复 使用道具 举报
多谢分享
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马