黑马程序员技术交流社区
标题:
javaEE+Android 入学面试题 分享
[打印本页]
作者:
AndroidM
时间:
2015-7-25 23:55
标题:
javaEE+Android 入学面试题 分享
本帖最后由 AndroidM 于 2015-7-25 23:54 编辑
最近,刚搞完Android的入学面试,把遇到了一些有价值的面试题分享下吧, :lol
1 , 金额转换,阿拉伯数字转换成中国传统形式。
* 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
public class Test1 {
public static void main(String[] args) {
//测试如下
System.out.println(changeNum("1234"));
System.out.println(changeNum("12340123"));
System.out.println(changeNum("90123410011001"));
System.out.println(changeNum("101000001010"));
System.out.println(changeNum("90123400001010"));
//测试异常
// System.out.println(changeNum("90123400001010A"));
}
//完成金额转换方法的定义
public static String changeNum(String str){
if(str==null || !str.matches("[0-9]+")){
throw new RuntimeException("字符串为空或含有非阿拉伯数字");
}
String[] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String[] arr = {"拾","佰","仟","萬","亿"};
StringBuilder sb = new StringBuilder();
//处理万位以下数目
if(str.length()<5){
for(int i=str.length() - 1; i >=0;i--){
char c = str.charAt(i);
int k = Integer.parseInt(c+"");
if(k==0 || i == str.length() - 1){
if( k==0 && i==str.length() -1)
;
else
sb.insert(0, num[k]);
}else{
sb.insert(0, num[k]+arr[str.length() - i -2]);
}
}
}
else{
//处理亿位以下数目,通过递归 分别处理 万位 及万位以下数据
if(str.length() < 9){
int k = str.length() - 4;
String f = changeNum(str.substring(0,k));
if(f.equals("零")||f.equals("零圆整"))
sb.append(f+changeNum(str.substring(k,str.length())));
else
sb.append(f+arr[3]+changeNum(str.substring(k,str.length())));
}else{
if(str.length() > 8){
int k = str.length() - 8;
sb.append(changeNum(str.substring(0,k))+arr[4]+changeNum(str.substring(k,str.length())));
}
}
}
//处理字符串中的多零情况,并返回
return sb.toString().replaceAll("[零]+", "零").replaceAll("[圆整]", "")+"圆整";
}
}
复制代码
输出答案:
壹仟贰佰叁拾肆圆整
壹仟贰佰叁拾肆萬零壹佰贰拾叁圆整
玖拾萬壹仟贰佰叁拾肆亿壹仟零壹萬壹仟零壹圆整
壹仟零壹拾亿零壹仟零壹拾圆整
玖拾萬壹仟贰佰叁拾肆亿零壹仟零壹拾圆整
复制代码
2、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2 ,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test2 {
public static void main(String[] args) throws IOException {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = in.readLine();
if(checkDigital(line))
throw new RuntimeException("转换错误,含有非数字字符");
try{
int value = Integer.parseInt(line);
String binary = toBinary(value);
System.out.println("right : :" + Integer.toBinaryString(value));
System.out.println("my result :"+binary);
}catch (Exception e) {
throw new RuntimeException("转换错误,数字过大");
}
}
private static String toBinary(int value) {
StringBuilder sb = new StringBuilder();
int y = 0;
while(value != 0 ){
y = value % 2;
value = value/2;
sb.insert(0, y);
}
return sb.toString();
}
private static boolean checkDigital(String line) {
char[] cs = line.toCharArray();
for(char c : cs){
if(!Character.isDigit(c)){
return true;
}
}
return false;
}
}
复制代码
3、 方法中的内部类能不能访问方法中的局部变量,为什么?
(
这道题可能很多人都和我一样,只知其然,而不知道其所以然, 推荐 看这个帖子,讲的非常好:http://www.cnblogs.com/dolphin0520/p/3811445.html
)
答: 可以訪問, 但是必須是用final修飾的局部变量, 因為在內部類中使用的局部變量是外部方法內變量的一個拷貝,
是編譯器在創建內部類時自動傳給內部類的,為了防止內部類中變量與方法中變量出現數據不一致的情況,所以使用
的变量必須要用final修飾。
4、 编写程序,生成5个1至10之间的随机整数,存入一个List集合,
* 编写方法对List集合进行排序(自定义排序算法,禁用Collections.sort方法和TreeSet),然后遍历集合输出。
public class Test4 {
public static void main(String[] args) throws IOException {
List<Integer> list = new ArrayList<Integer>();
for(int i=0; i<5; i++)
list.add(new Random().nextInt(10));
System.out.println(list);
//sortMaopao(list);
//sortChoose(list);
sortInsert(list);
}
}
//插入排序
private void sortInsert(List<Integer> list) {
for(int i=1; i<list.size(); i++){
int j;
int temp = list.get(i);
for( j=i; j>0&& temp <list.get(j-1) ; j--){
list.set(j, list.get(j-1));
}
list.set(j, temp);
}
System.out.println(list);
}
//选择排序
private void sortChoose(List<Integer> list) {
for(int i=0; i<list.size(); i++){
for(int j=i+1; j<list.size(); j++){
if(list.get(i)>list.get(j)){
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
}
System.out.println(list);
}
//冒泡排序
private void sortMaopao(List<Integer> list) {
for(int i=1; i<list.size(); i++){
for(int j=0; j<list.size()-i; j++){
if(list.get(j)>list.get(j+1)){
int temp = list.get(j);
list.set(j, list.get(j+1));
list.set(j+1, temp);
}
}
}
System.out.println(list);
}
}
复制代码
作者:
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