AP计算机科学A:运行时错误

学习AP计算机科学A的概念、例题和解释

大学教师应用商店 Varsity辅导android商店

例子问题

问题1:运行时错误

考虑下面的代码:

对象[]objects = new Object[20];

For (int I = 0;我< objects.length;我+ +){

开关(i % 4) {

例0:

objects[i] = new Integer(i + 3);

打破;

案例1:

objects[i] = "This val: " + i;

打破;

案例2:

objects[i] = new Double(i * 4.4);

打破;

案例3:

objects[i] = "That val: " + (i*12);

打破;

String s = (String)对象[8];

System.out.println(年代);

上面代码中的错误是什么?

可能的答案:

将会有一个NullPointerException。

将抛出一个ClassCastException。

数组溢出了。

不能以这种方式将各种类型赋给数组。

没有错误。

正确答案:

将抛出一个ClassCastException。

解释

为了理解这段代码中的错误,您必须理解循环在做什么。将变量类型赋给的数组对象根据分割循环控制变量的余数对象除以4。这样你就得到了一个重复的模式:

整数,字符串,双,字符串,整数,字符串,双,字符串,…

现在,索引8将是一个Integer(因为它的余数为0)。这意味着当你将类型转换为String类型时,你将收到一个typeecastexception用于行读取:

字符串年代=(字符串)对象[8];

问题11:程序分析

公共静态int [] [] doWork (int [] [], int [] [] b) {

Int [][] ret = new Int [a.length][a .length];

For (int I = 0;我< a.length;我+ +){

For (int j = 0;j <[我]. length;j + +) {

Ret [i][j] = a[i][j] + b[i][j];

返回受潮湿腐烂;

在上面的代码中,哪些潜在错误不会在下一行中被捕获?

受潮湿腐烂] [j] =一个] [j) +b] [j];

可能的答案:

数组可以包含空值

数组可能会出界

数组一个可以设置为空

数组不能初始化

代码编写时就很好

正确答案:

数组可能会出界

解释

在代码的这一点,它是不可能的一个b是零。此外,这些数组不能包含空值,因为它们是由原始类型(int类型)。它们不能设置为空,因为它们不是对象。这里的潜在错误有点深奥,但需要注意。有一个可能的错误,即二维数组是“不规则的”;然而,我们不需要担心这个考试。不过,也有可能数组b(假设它不为空)与数组的大小不相同一个因为我们用的是一个要设置循环计数,这可能意味着数组溢出b通过使用过大的索引值。(注意,也有可能b可能为null,导致错误;然而,这种可能性并没有答案选择。)

由大学教师学习工具