目录
选择题
1.
toUpperCase 不在原数据上修改,而是复制一份,在复制的数据上的修改,原数据不变
2.
类的实例和数组都是对象,一般对象都是在堆区存放的
3.
for 循环是最慢的。如下图:
clone() 是深拷贝
4.
接口只有常量和抽象方法。
5.
类方法不依赖于对象。
6.
i,j 都是 整型的包装类,所以使用 == 会比较它们的值是否相同。
而 equals 比较的是 i,j 的内容,内容相同,所以也是 true。
7.
编译会报错,因为没有帮父类进行构造。
编程题
1. 另类加法
不进位相加的结果 = 数A ^ 数B
进位 = (数A & 数B)<< 1
根据以上信息,就可以写代码了。
可以先看进位是否为零,如果不为零就异或到进位等于 0 为止。
import java.util.*;
public class UnusualAdd {
public int addAB(int a, int b) {
int sum = 0;
while (b != 0) {
// 两个数异或的值就是它们不进位相加的值
sum = a ^ b;
// 看是否需要进位,如果为 0 ,则不需要进位
int carry = (a & b) << 1;
a = sum;
b = carry;
}
return sum;
}
}
2. 走方格的方案数
根据上面的思路,我们就可以写代码了。
代码实现:
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
int m = in.nextInt();
int count = getRoadCount(n, m);
System.out.println(count);
}
}
public static int getRoadCount(int n, int m) {
if (n == 1 || m == 1) {
return n + m;
}
return getRoadCount(n, m - 1) + getRoadCount(n - 1, m);
}
}