计算机科学:运行时错误

学习计算机科学的概念,示例问题和解释

大学导师应用商店 大学导师安卓商店

例子问题

例子问题1:运行时错误

考虑下面的代码:

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

For (int I = 0;I < 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);

打破;

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

System.out.println(年代);

上面的代码有什么错误?

可能的答案:

会有一个NullPointerException。

将会抛出一个ClassCastException。

数组溢出。

不能以这种方式为数组分配各种类型。

没有错误。

正确答案:

将会抛出一个ClassCastException。

解释

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

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

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

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

问题11:程序分析

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

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

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

For (int j = 0;J < a[i].length;j + +) {

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

返回受潮湿腐烂;

在上面的代码中,在下一行中没有捕捉到的潜在错误是什么?

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

可能的答案:

数组可以包含空值

数组可能会越界

数组一个可以设置为空

数组可能没有初始化

代码写起来很好

正确答案:

数组可能会越界

解释

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

大学导师的学习工具