黑马程序员技术交流社区

标题: javaEE+Android 入学面试题 分享 [打印本页]

作者: AndroidM    时间: 2015-7-25 23:55
标题: javaEE+Android 入学面试题 分享
本帖最后由 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. }
复制代码




作者: panpanai    时间: 2015-7-27 19:37
先看一下,谢谢分享。
作者: dadai5ai    时间: 2015-7-27 19:39
谢谢分享,我也到了这一步,感觉有的知识不太扎实,一边复习一边看题
作者: jsyswa    时间: 2015-7-27 21:01
谢谢分享
作者: 曾云鹏    时间: 2015-7-27 21:35
收藏了.
作者: wh121    时间: 2015-7-27 21:37
感觉好难啊
作者: kkkkkccccc    时间: 2015-7-27 21:38
好难看不懂...
作者: lizequn007wo    时间: 2015-7-27 21:52
谢谢分享
作者: 菜鸟哥    时间: 2015-7-27 21:53
挺好的,很有用
作者: Matrix_heima    时间: 2015-7-27 22:07
谢谢分享!!
作者: maizi1912    时间: 2015-7-27 22:10
不错   学习了
作者: zk338142    时间: 2015-7-27 22:32
好东西和搜藏了
作者: Claw    时间: 2015-7-27 23:17
还是有点难度的
作者: rxtm    时间: 2015-7-27 23:31
怎么感觉都这么难
作者: AndroidM    时间: 2015-7-27 23:47
rxtm 发表于 2015-7-27 23:31
怎么感觉都这么难

我是选的里面稍难的,拿出来分享的,所以不要灰心哈
作者: 章浩    时间: 2015-7-27 23:53
请问 有多少题   有时间限制吗  还有需要做对 多少题
作者: 郁金香大公爵    时间: 2015-7-28 10:21
谢谢,我这也马上就要入学测试了
作者: maqijian    时间: 2015-7-28 11:20
就喜欢这种分享帖,楼主好人
作者: xch184415359    时间: 2015-7-28 12:14
看不懂:Q:Q:Q
作者: lizf2010    时间: 2015-7-28 14:52
多谢分享
作者: 明月刀割芳草    时间: 2015-7-28 14:56
挺好的东西
作者: syzc321    时间: 2015-7-28 15:42
留着,谢谢分享~
作者: 仨儿先森    时间: 2015-7-28 17:10
多谢分享
作者: huizi1992    时间: 2015-7-28 18:39
这个果断拿下!!
作者: 李工    时间: 2015-7-28 19:00
楼主威武
作者: 马北剑西    时间: 2015-7-28 21:22
谢谢分享,做来看看
作者: 陈建民1    时间: 2015-7-28 21:28
好像挺难的样子。。。
作者: Wqi    时间: 2015-7-28 22:16
看着好难啊。。。
作者: DD_vincent    时间: 2015-7-29 00:05
感觉有些知识点还不够巩固,虽然对概念了解比较好。但是运用还是需要大量的训练
作者: 李峥    时间: 2015-7-29 01:42
好难得样子
作者: 嗯十一点晚安    时间: 2015-7-29 08:28
看来入学测试题,有点代码量啊
作者: wing-SF    时间: 2015-7-29 09:30
那个方法内部类,确实要考那么难么?
作者: 郁金香大公爵    时间: 2015-7-29 09:31
兄弟,第二题准不准?
作者: AndroidM    时间: 2015-7-29 13:53
郁金香大公爵 发表于 2015-7-29 09:31
兄弟,第二题准不准?

没有标准答案, 看自己理解,我的只是提供一个参考,
作者: zz123    时间: 2016-1-6 00:00
黑马就是那么溜黑马就是那么溜
作者: 雪中飞    时间: 2016-1-8 09:49
谢谢分享
作者: czhczhczh    时间: 2016-1-8 10:46
想请问一下楼主,面试是视屏面试吗?面试的时候是给出题目让你把整段代码写出来吗?还是怎么呢?
作者: 醉月风纯    时间: 2016-1-8 16:50
shou chang le

作者: ChinaTuring    时间: 2016-1-10 00:46
en   不错
作者: HelloMyLove    时间: 2016-3-10 22:20
加油加油
作者: 914030919    时间: 2016-3-10 22:58
这个不错,提前结束,向这个水平靠拢
作者: 超人d咖啡也加糖    时间: 2016-3-11 12:56
谢谢楼主
作者: HelloMyLove    时间: 2016-3-13 11:20
加油 加油
作者: liujian5461267    时间: 2016-4-28 19:20
好厉害,谢谢啊,年纪大了,要好好学习了
作者: xiaogui    时间: 2016-4-28 20:31
我要看看,自己不是很懂,先留着以后用。
作者: 359980621    时间: 2016-4-28 20:41
帮顶一哈
作者: 风色月下    时间: 2016-4-28 22:12
先收藏了{:2_30:}
作者: SLEEPWALKER    时间: 2016-4-28 22:17
这是个好帖子  赞
作者: z736886202    时间: 2016-4-28 23:13
楼主好人  谢谢分享
作者: johnli    时间: 2016-4-29 00:07
谢谢分享
作者: 为何帅    时间: 2016-4-29 00:26
谢谢楼主分享,学习ing
作者: yoghurt29    时间: 2016-4-29 12:32
感谢分享,
作者: 丿若恋灬如初    时间: 2016-4-29 13:14
学习学习
作者: 海乃百川    时间: 2016-8-30 22:30
好难啊,感觉有点难度
作者: 水月灬清影    时间: 2016-8-30 22:38
楼主,你这是入学考试那10道题里的吧?面试也这个难度?我自己第一次做的时候3道题连想带做1个小时根本做不完。
作者: zhouyang1993    时间: 2016-9-2 18:50
感谢分享
作者: zhao0506    时间: 2016-9-2 20:35
厉害啊   .不错收藏了
作者: barny    时间: 2016-10-6 16:38
做完了,还有几天就点招,这几天我搞了题海战术
作者: 杨杰锋    时间: 2016-10-6 20:15
多谢分享
作者: 顺其自然吧    时间: 2016-10-6 21:29
看的懵懵的  
作者: 风暴之灵    时间: 2016-10-6 22:17
可以,很强势!
作者: 冯达其    时间: 2017-3-22 12:40
挺难的,特别是第一题
作者: linzpcom    时间: 2017-3-22 13:29
谢谢楼主分享





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2