例子问题
问题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= 21,z= 30;
这些行都不会引起a编译时
错误
加勒比海盗=新int[我/ 5];
intx= 10;y= 21,z= 30;
编译中的错误甚至在任何代码试图执行之前就发生了。因此,这主要是代码中的语法错误。在上面的选择中,行
Int x = 10;Y = 21, z = 30;
后面有分号吗10.
这将导致在此代码后面的代码中出现错误
Y = 21, z = 30;
是无效的Java代码。
这段代码中还有其他错误。加勒比海盗[我] =z/我;
会在什么时候造成除以0的错误我是0。同时,加勒比海盗[我] =z*我;
会超出数组的边界吗加勒比海盗
.然而,这些都不是编译时错误。在代码能够运行之前发生的错误!