目录
选择题
1.
程序计数器和方法栈都属于线程私有,而方法区和堆都是属于线程共享的。
2.
Java 是半编译半执行语言,class 是与操作系统无关的,面向 JVM 的二进制文件。
运行时,JVM 实际上此时会把 class 文件翻译成操作系统能读懂的机器码。
JVM 也是有版本的。版本不同,就会有差异,同样的代码放到不同版本的 JVM 可能会无法运行。
3.
线程的启动不能直接调用 run(),而是得调用 Thread 类提供的 start 方法。
执行 start 方法才会启动一个子线程。
如果直接调用 run(), 就不会启动子线程,而是相当于调用普通的方法。
4.
接口中的变量都是被 public static final 修饰的 常量。
接口中方法则是被 public abstract 修饰。
编程题
1. 星际密码
代码实现:
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int[] hash = new int[10001];
hash[1] = 1;
hash[2] = 2;
for (int i = 3; i < hash.length; i++) {
hash[i] = hash[i - 1] + hash[i - 2];
hash[i] = hash[i] % 10000;
}
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
for (int i = 0; i < n; i++) {
int x = in.nextInt();
System.out.printf("%04d", hash[x]);
}
System.out.println();
}
}
}
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.hasNext()) { // 注意 while 处理多个 case
String n = in.next();
int ans = getNum(n);
System.out.println(ans);
}
}
public static int getNum(String n) {
if (n.length() == 1) return Integer.valueOf(n);
int sum = 0;
for (int i = 0; i < n.length(); i++) {
char c = n.charAt(i);
sum += c - '0';
}
if (sum < 10) return sum;
else return getNum(sum + "");
}
}