AP计算机科学A:编译时错误

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

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

例子问题

问题1:程序分析

考虑下面的代码:

公共静态类矩形{

私人双宽、高;

公共矩形(双w,双h) {

宽度= w;

高度= h;

}

public double getArea() {

返回宽度*高度;

}

public double getPerimeter() {

返回2 *宽度+ 2 *高度;

}

}

公共静态类Square扩展矩形{

公共广场(双s) {

超级(s, s);

}

}

public static void main(String[] args) {

矩形[]rects = new矩形[6];

For (int I = 0;I < 6;我+ +){

If (i % 2 == 0) {

rects[i] = new Rectangle(i+10,i + 20);

} else {

rects[i] = new Square(i+20);

}

}

正方形s = rects[1];

}

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

可能的答案:

你需要为类使用“implements”,而不是“extends”广场

不能执行最后的赋值操作。

你不能分配广场对象的数组矩形对象。

有一个数组溢出。

的声明中有一个错误矩形数组中。

正确答案:

不能执行最后的赋值操作。

解释

这段代码用交替的矩形和正方形对象填充6个成员的数组。你可以这样做,因为Square类是Rectangle的子类。也就是说,因为正方形是矩形,您可以将Square对象存储在Rectangle变量中。然而,即便如此矩形[1]是一个正方形,你不能立即将它重新赋值给一个正方形对象。代码现在已经开始考虑数组中的所有对象都是矩形对象。你需要显式地对这行进行类型转换才能使这行正常工作:

Square s = (Square)(rects[1]);

问题1:调试

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

Int val1 = -14,val2 = 4;

Final int val3 = 9;

Double val4 = 4.1;

双val5 = 3.1;

Val1 = val2 * val3

Val3 = val1 * 12;

Val5 = val1 - val3;

Val4 = val2 + val5;

可能的答案:

不能对双精度和整数执行混合加法或减法。

不能将整数减法的结果赋值给val5

你必须定义val2在它自己的线上。

不能相乘val3通过val2

不能将新的整数值赋值给val3

正确答案:

不能将新的整数值赋值给val3

解释

给出的选项中唯一的错误是这段代码给变量赋了一个新值val3,它被定义为常数。(这是由关键字表示的最后在声明的其余部分之前。)一旦声明了常量,就不能更改它们。因此,下面这行代码将导致编译时错误:

Val3 = val1 * 12;

问题1:编译时错误

public static void main(String[] args) {

Int [] x = {3,4,4,5,17,4,3,1};

Int [] y = remove(x,4);

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

system . out。Print (y[i] + " ");

}

}

公共静态布尔移除(int[] arr, int val) {

布尔值found = false;

int我;

For (i = 0;I < r。长度&& !找到;我+ +){

如果(arr[i] == val) {

Found = true;

}

}

如果(发现){

For (int j = i;J < arr.length;j++) {

[j - 1] = [j];

}

arr (arr)。长度- 1]= 0;

}

返回发现;

}

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

可能的答案:

其中一个赋值中存在类型不匹配

有多个选项可以删除,这是不支持的功能

删除方法时,存在一个在使用前未初始化的变量

中的输出循环主要会溢出数组y

代码中没有错误

正确答案:

其中一个赋值中存在类型不匹配

解释

有问题的一行是这样的:

Int [] y = remove(x,4);

注意变量y定义为数组。现在,人们很容易认为(没有仔细观察)删除方法在删除完成后返回数组;但是,逻辑不是这样工作的删除方法。相反,它返回一个布尔值,指示删除是否成功(也就是说,它告诉你是否真的找到了值)。因此,不能像上面那样赋值,因为这两种类型不相同。也就是说,y是一个整数数组,而删除返回一个布尔值!

问题#241:计算机科学

公共接口ServerInstance

byte [] readBytes ();

布尔writeBytes (byte [] b);

布尔维克();

布尔状态();

无效的睡眠();

}

MyHost实现ServerInstance

布尔运行= false;

公共布尔唤醒(){

//这里的其他逻辑代码…

返回运行;

}

公共布尔状态(){

//这里的其他逻辑代码…

返回运行;

}

public byte[] readBytes() {

Byte [] buffer = null;

//这里的其他逻辑代码…

返回缓冲区;

}

Public void sleep() {

//这里的其他逻辑代码…

Running = false;

}

public byte[] writeBytes(byte[] b) {

//这里的其他逻辑代码…

返回b;

}

//其他方法…

}

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

可能的答案:

睡眠方法不返回任何东西

没有错误

这个词扩展应该用,不是吗实现了

writeBytes方法没有正确定义

readBytes方法初始化变量缓冲为空

正确答案:

writeBytes方法没有正确定义

解释

当您实现一个接口时,在该接口中定义的所有方法都必须写入提议实现该接口的类中。(或者,如果它们没有在那里实现,则需要涉及抽象类——但这不是我们这里要讨论的。)这些方法必须匹配接口中提出的原型。在示例代码中,ServerInstance有一个方法writeBytes返回一个布尔值。然而,并且类已将此方法实现为返回byte []价值。由于对于具有相同参数集的方法不能有不同类型的返回值,因此Java将其解释为建议的实现writeBytes (byte [] b),并且此方法必须返回一个布尔if并且就是执行ServerInstance

问题1:调试

Public static void foo() {

Int x = 10;Y = 21, z = 30;

Int [] r = null;

For (int I = 0;I < y;I += 4) {

Arr = new int[i / 5];

}

For (int I = 0;I < x;我+ +){

Arr [i] = z / i;

}

For (int I = 0;I < z;我+ +){

Arr [i] = z * i;

}

}

下面哪行代码会导致a编译时错误呢?

可能的答案:

加勒比海盗] =z*

加勒比海盗] =z/

intx= 10;y= 21z= 30;

这些行都不会引起a编译时错误

加勒比海盗int/ 5];

正确答案:

intx= 10;y= 21z= 30;

解释

编译中的错误甚至在任何代码试图执行之前就发生了。因此,这主要是代码中的语法错误。在上面的选择中,行

Int x = 10;Y = 21, z = 30;

后面有分号吗10这将导致在此代码后面的代码中出现错误

Y = 21, z = 30;

是无效的Java代码。

这段代码中还有其他错误。加勒比海盗] =z/会在什么时候造成除以0的错误是0。同时,加勒比海盗] =z*会超出数组的边界吗加勒比海盗.然而,这些都不是编译时错误。在代码能够运行之前发生的错误!

大学导师提供的学习工具