例子问题
问题1:程序分析
这个函数有趣的
定义如下:
Public int fun(int[] a)
{
一个一个。长度- 1]=一个[0];
返回一个[0]+(一个[0]% 2);
}
一个[0]
在执行以下代码段之后?Int [] a = {3,6,9,12};
A [0] = fun(A);
3.
6
9
13
12
12
第一部分有趣的
将数组最后一个位置的值赋给第一个位置。然后,它返回A [0] + (A [0] % 2)
。最后一部分将是"1
“如果一个[0]
很奇怪,而且"0
“如果一个[0]
是偶数。自A [0] == 12
,它是偶数,则表达式的计算结果为12 + 0
,也就是12
。
问题2:程序分析
x
,y
,z
在执行以下代码之后?Int x = 4, y = 3, z;
For (int I = 0;I < 5;我+ +)
{
Z = x + y;
Y = x - Y;
X = z;
}
X == 16 y == 12 z== 16
X == 28 y == 4 z== 28
X == 28 y == 4 z== 4
X == 32 y == 24 z == 32
X == 14 y == 2 z == 14
X == 28 y == 4 z== 28
循环将运行5次。的值x
,y
,z
每次运行后将如下:
I == 0: x == 7 y == 1 z == 7
I == 1: x == 8 y == 6 z == 8
I == 2: x == 14 y == 2 z == 14
I == 3 x == 16 y == 12 z == 16
I == 4 x == 28 y == 4 z == 28
最后,我
等于5,并且值不再改变。
问题3:程序分析
If (s.length() <= 5)
返回s5 + s4 + s3 + s2 + s1;
其他的
返回s1 + s2 + mystery(s3) + s4 + s5;
}
的输出是什么
System.out.println(神秘(“异常”));
SEITRMALIONBA
异常
ABNOILAMRTIES
这些答案都不正确。
SEITILAMRONBA
ABNOILAMRTIES
的.substring ()
方法接受参数中第一个数字处的字符,并遍历String,直到到达参数中的第二个数字,而不复制第二个数字处的字符。
在第一部分神秘()
,生成并填充字符串s1、s2、s3、s4和s5。如果n = #个字符在s中,s1得到s中的第一个字符,s2得到s中的第二个字符,s3得到第三个到n-2个字符,s4得到n-1个字符,s5得到最后一个字符。
我们来看第二部分神秘()。
If (s.length() <= 5)
返回s5 + s4 + s3 + s2 + s1;
其他的
返回s1 + s2 + mystery(s3) + s4 + s5;
的如果
语句检查s的长度,如果小于或等于5,则返回一个由s5组成的String,后面跟着s4,以此类推。如果s等于abcde,那么如果
将求值为true,并返回"edcba"。在递归中,这被称为“基本情况”。
的其他的
语句用于长度大于5个字符的字符串。它返回s1,然后是s2,然后是mystery的结果(s3),然后是s4和s5。它调用自己的事实导致了这个递归。
让我们逐步了解这个示例。的理由神秘()
, s代表“异常”。在第一部分之后,结果如下:
其他的
,因此它返回以下内容:A + B +神秘(NORMALITI) + E + S
其他的
,因此它返回以下内容:N + O + mystery(RMALI) + T + I
A + B + N + O + mystery(RMALI) + T + I + E + S
如果
这一次。它返回以下内容:I + l + a + m + r
A + b + n + o + I + l + A + m + r + t + I + e + s
问题1:程序分析
考虑数组
Int [] arr = {1,2,3,4,5};
里面的值是什么加勒比海盗
在执行以下代码之后?
For (int I = 0;I < r。长度- 2;我+ +)
{
Int temp = arr[i];
Arr [i] = Arr [i+1];
Arr [i+1] = temp;
}
23451
OutOfBoundsException
54321
15432
12345
23451
我们从一个数组开始,加勒比海盗,
大小为5的,包含{1,2,3,4,5}。
代码中的循环,
For (int I = 0;I < r。长度- 2;我+ +)
循环遍历数组直到倒数第二个单元格加勒比海盗。长度- 2
是倒数第二个单元格的索引,它从第一个单元格开始。
让我们看看循环中的代码。
Int temp = arr[i];
Arr [i] = Arr [i+1];
Arr [i+1] = temp;
Arr [0] == 1
r[1] == 2
温度= 1
Arr [0] = 2
Arr [1] = 1
Arr [] == {2,1,3,4,5}
Arr [1] == 1
Arr [2] == 3
温度= 1
Arr [1] = 3
Arr [2] = 1
Arr [] == {2,3,1,4,5}
当i = 2时
Arr [2] == 1
Arr [3] == 4
温度= 1
Arr [2] = 4
Arr [3] = 1
Arr [] == {2,3,4,1,5}
Arr [3] == 1
Arr [4] == 3
温度= 1
Arr [3] = 3
Arr [4] = 1
Arr [] == {2,3,4,5,1}
随着循环的进行,它移动其中的值加勒比海盗[0]
一直到数组的最后。
问题1:识别边界案例
识别可能在此程序中发生的用户错误
UserInput ui = new UserInput();//用户输入
int s = (Integer)ui;
System.out.println(年代);
用户输入不能是整数
parseInt语句不正确
用户永远不会做错任何事情
没什么不对的
用户输入不能是整数
用户可以输入字符串,转换为(Integer)会导致运行时异常。如果存在运行时异常,程序将停止并为黑客打开漏洞。一旦黑客知道如何停止程序,他们就可以开始输入错误数据以查看数据库模式以收集数据。解决这个问题的一种方法是使用实用程序方法,如parseInt(ui)。
问题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 Rectangle;
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]
是一个正方形,你不能立即将它重新赋值给一个正方形对象。代码现在已经开始考虑数组中的所有对象都是矩形对象。你需要显式地对这行进行类型转换才能使这行正常工作:
正方形s =(正方形)(矩形[1]);
问题7:程序分析
下面代码中的错误是什么?
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;
你必须定义val2
在它自己的线上。
不能对双精度和整数执行混合加法或减法。
不能将整数减法的结果赋值给val5
。
不能将新的整数值赋值给val3
。
不能相乘val3
通过val2
。
不能将新的整数值赋值给val3
。
给出的选项中唯一的错误是这段代码给变量赋了一个新值val3
,它被定义为常数。(这是由关键字表示的最后
在声明的其余部分之前。)一旦声明了常量,就不能更改它们。因此,下面这行代码将导致编译时错误:
Val3 = val1 * 12;
问题8:程序分析
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
是一个整数数组,而删除
返回一个布尔值!
问题1:程序分析
公共接口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;
}
//其他方法…
}
上面代码中的错误是什么?
的readBytes
方法初始化变量缓冲
为空
没有错误
的writeBytes
方法没有正确定义
的睡眠
方法不返回任何东西
这个词扩展
应该用,不是吗实现了
的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/我;
加勒比海盗=新int(我/ 5];
这些行都不会引起a编译时
错误
intx= 10;y= 21,z= 30;
加勒比海盗(我] =z*我;
intx= 10;y= 21,z= 30;
编译中的错误甚至在任何代码试图执行之前就发生了。因此,这主要是代码中的语法错误。在上面的选择中,行
Int x = 10;Y = 21, z = 30;
后面有分号吗10。
这将导致在此代码后面的代码中出现错误
Y = 21, z = 30;
是无效的Java代码。
这段代码中还有其他错误。加勒比海盗(我] =z/我;
会在什么时候造成除以0的错误我是0。同时,加勒比海盗(我] =z*我;
会超出数组的边界吗加勒比海盗
。然而,这些都不是编译时错误。在代码能够运行之前发生的错误!