Java面试题总汇

简介:

6位短信验证码(不以0开头)

1
2
3
4
5
6
7
8
9
10
11
12
13
String random = String.valueOf(Math.random());
boolean start = false;
StringBuilder sb = new StringBuilder();
for (int i = 2,k = 0; k < 6 && i < random.length(); i++) {
if (!start && random.charAt(i) == '0')
continue;
else {
start = true;
sb.append(random.charAt(i));
k++;
}
}
System.out.println(sb.toString());

求从10到100中能被3或5整除的数的和

1
2
3
4
5
6
7
8
private static final int faceQuestions1() {
int sum = 0;
for (int i = 10; i <= 100; i++) {
if (i % 3 == 0 || i % 5 == 0)
sum += i;
}
return sum;
}

将一个字符串逆序,不要使用反转函数

1
2
3
4
5
6
private static final String faceQuestions2(String originalStr) {
StringBuilder sb = new StringBuilder();
for (int i = originalStr.length() - 1; i >= 0; i--)
sb.append(originalStr.charAt(i));
return sb.toString();
}

反转一个栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static final void faceQuestions3() {
Stack<String> items = new Stack<>();
items.push("my");
items.push("name");
items.push("is");
items.push("benjamin");
revertStack(items);
System.out.println(items);
}

private static final <E> void revertStack(Stack<E> stack) {
Queue<E> queue = new LinkedList<>();
while (stack.size() > 0)
queue.offer(stack.pop());
while (queue.size() > 0)
stack.push(queue.poll());
}

Date转换字符串


给定一个java.util.Date对象,如何转化为”2007-3-22 20:23:22”格式的字符串
我这里用一种简单的方式,不使用SimpleDateFormat

1
2
3
private static void formatDate(Date date) {
System.out.printf("%TF %<TT", date);
}


如何判断一个数是否是素数

1
2
3
4
5
6
7
8
9
10
11
private static void checkPrimeNumber(int num) {
for (int i = 2; i < num/2; ++i) {
if (num % i == 0) {
System.out.println("不是素数");
break;
}
if (i == num/2 - 1) {
System.out.println(num + "是素数");
}
}
}

如何得到一个数的阶乘

阶乘举个例子吧:6的阶乘是 6 2 * 1

1
2
3
4
5
6
private static int factorial(int num) {
if (num == 1) {
return 1;
}
return num * factorial(num - 1);
}

二分法查找

写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* 二分法查找,使用递归
* @param originArr
* @param num
* @param startIndex
* @param endIndex
* @return
*/

private static int binarySearch(int[] originArr, int num, int startIndex, int endIndex) {
int index = (startIndex + endIndex) / 2;
if (startIndex < 0 || endIndex > originArr.length || num < originArr[startIndex] || num > originArr[endIndex]) {
throw new IllegalArgumentException("输入的参数不规范,请重新输入");
}
if (num < originArr[index]) {
return binarySearch(originArr, num, startIndex, index);
} else if (num > originArr[index]) {
return binarySearch(originArr, num, index, endIndex);
} else {
return index;
}
}

/**
* 二分法查找,不适用递归
* @param originArr
* @param num
* @return
*/

private static int binarySearch(int[] originArr, int num) {
int index = -1;
int startIndex = 0;
int endIndex = originArr.length - 1;
while (startIndex <= endIndex) {
index = (startIndex + endIndex) / 2;
if (num < originArr[index]) {
endIndex = index;
} else if (num > originArr[index]) {
startIndex = index;
} else {
break;
}
}
return index;
}

数组移动


定义一个int型的一维数组,包含10个元素,然后将数组中的元素都向前移一个位置,即,a[0]=a[1],a[1]=a[2],…最后一个元素的值是原来第一个元素的值,然后输出这个数组。

1
2
3
4
5
private static void moveArray(int a[]) {
int[] b = new int[a.length];
System.arraycopy(a, 1, b, 0, a.length-1);
b[b.length-1] = a[0];
}


杨辉三角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static void yanghuiTriangle(int row) {
int triangle[][] = new int[row][];
for (int i = 0; i < triangle.length; ++i) {
triangle[i] = new int[i+1];
for (int j = 0; j < triangle.length-i-1; ++j) {
System.out.print(" ");
}
for (int j = 0; j <= i; ++j) {
if (i == 0 || j == 0 || j == i) {
triangle[i][j] = 1;
} else {
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
}
System.out.print(triangle[i][j] + " ");
}
System.out.println();
}
}

输出结果

1
2
3
4
5
6
7
8
9
10
         1 
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

输入数字,输出中文大写


如输入101,输出壹佰零壹
输入100010,输出拾万零壹拾
自己闲来无聊就写了一个小程序,希望大家多测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/**
* 生成中文描述的数字串
* @param originStr
* @return
*/

private static String generateChinese(String originStr) {
String pointStr = "";
// 小数处理
if (originStr.contains(".")) {
pointStr = originStr.substring(originStr.indexOf('.') + 1); // 得到小数点后的数
originStr = originStr.substring(0, originStr.indexOf('.'));
}
originStr = filterStartWithZero(originStr); // 去除前面的0
StringBuilder sb = new StringBuilder();
for (int i = 0; i < originStr.length(); ++i) {
if (i % 4 == 0) {
if (i / 4 == 1) {
sb.append("万");
} else if (i / 4 == 2) {
sb.append("亿");
}
} else {
if (i % 4 == 1) {
sb.append("十");
} else if (i % 4 == 2) {
sb.append("百");
} else if (i % 4 == 3) {
sb.append("千");
}
}
sb.append(getChinese(originStr.charAt(originStr.length()-i-1)));
}
String result = reverse(sb.toString());
result = filterAfterGenerate(result); // 小数点之前的数处理完毕

/** 处理小数点后的数 **/
StringBuilder pointSB = new StringBuilder();
if (!"".equals(pointStr)) {
for (int i = 0; i < pointStr.length(); ++i) {
pointSB.append(getChinese(pointStr.charAt(i)));
}
result = result + "点" + pointSB.toString();
}
return result;
}

/**
* 最后产生结果后进行过滤,把不相关的数据替换掉
* @param originStr
* @return
*/

private static String filterAfterGenerate(String originStr) {
String[] filterData = {"零亿", "零万", "零千", "零百", "零十", "零零"};
String[] replaceData = {"亿", "万", "零", "零", "零", "零"};
int flag = 0;
/** 替换filterData中的数据为replaceData中的数据 **/
while (true) {
for (int i = 0; i < filterData.length; ++i) {
if (!originStr.contains(filterData[i])) {
flag++;
} else {
flag = 0;
originStr = originStr.replace(filterData[i], replaceData[i]);
}
}
if (flag == filterData.length) {
break;
} else {
flag = 0;
}
}
/** 去除末尾的零,比如 20: 二十零 **/
while (originStr.endsWith("零")) {
originStr = originStr.substring(0, originStr.length()-1);
}
return originStr.equals("") ? "零" : originStr; // 如果是空,就返回零
}

/**
* 根据传入的数字得到中文
* @param num
* @return
*/

private static char getChinese(char num) {
char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
char[] chinese = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};
for (int i = 0; i < digit.length; ++i) {
if (digit[i] == num) {
return chinese[i];
}
}
return '零';
}

/**
* 反转字符串
* @param str
* @return
*/

private static String reverse(String str) {
StringBuilder sb = new StringBuilder();
for (int i = str.length() - 1; i >= 0; --i) {
sb.append(str.charAt(i));
}
return sb.toString();
}

/**
* 去除输入字符串开头的零,如:0023输出为23
* @param originStr
* @return
*/

private static String filterStartWithZero(String originStr) {
int i = 0;
for (; i < originStr.length(); ++i) {
if (originStr.charAt(i) != '0') {
break;
}
}
return originStr.substring(i);
}

public static void main(String[] args) {
System.out.println(generateChinese("100010220.2")); // 壹亿零壹万零贰百贰十点贰
System.out.println(generateChinese("12003.2341")); // 壹万贰千零叁点贰叁肆壹
System.out.println(generateChinese("0000.00")); // 零点零零
System.out.println(generateChinese("00001.230")); // 壹点贰叁零
System.out.println(generateChinese("12003943490.12")); // 壹百贰十亿零叁百玖十肆万叁千肆百玖十点壹贰
}


输出九九乘法表

private static void nineNineMulitTable() {
    for (int i = 1; i <= 9; ++i) {
        for (int j = 1; j <= i; ++j) {
            System.out.print(i + "*" + j + "=" + (i * j) + "\t");
        }
        System.out.println();
    }
}
目录
相关文章
|
7天前
|
Java
Java面向对象实践小结(含面试题)(下)
Java面向对象实践小结(含面试题)(下)
18 1
|
7天前
|
存储 缓存 开发框架
Java基础面试题小结(下)
Java基础面试题小结(下)
15 0
|
7天前
|
存储 安全 Java
Java基础面试题小结(上)
Java基础面试题小结(上)
15 0
|
7天前
|
设计模式 Java
Java面向对象实践小结(含面试题)(上)
Java面向对象实践小结(含面试题)
13 1
|
9天前
|
Java
【JAVA面试题】static的作用是什么?详细介绍
【JAVA面试题】static的作用是什么?详细介绍
|
9天前
|
Java
【JAVA面试题】final关键字的作用有哪些
【JAVA面试题】final关键字的作用有哪些
|
9天前
|
JavaScript 前端开发 Java
【JAVA面试题】什么是引用传递?什么是值传递?
【JAVA面试题】什么是引用传递?什么是值传递?
|
9天前
|
安全 Java
【JAVA面试题】什么是对象锁?什么是类锁?
【JAVA面试题】什么是对象锁?什么是类锁?
|
9天前
|
存储 自然语言处理 Java
【JAVA面试题】什么是代码单元?什么是码点?
【JAVA面试题】什么是代码单元?什么是码点?
|
9天前
|
Java 程序员
【JAVA面试题】基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?
【JAVA面试题】基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?