例子问题
例子问题1:程序分析
这个函数有趣的
定义如下:
公共int (int[] a)
{
一个一个。长度- 1]= a[0];
返回[0]+ ([0]% 2);
}
一个[0]
在执行以下代码段之后?Int [] a = {3,6,9,12};
A[0] =乐趣(A);
13
6
3.
12
9
12
第一部分有趣的
将数组最后一个位置的值赋给第一个位置。然后,返回[0] + ([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 = 28, y = 4, z= 4
X = 28, y = 4, z= 28
X == 14 y == 2 z == 14
X == 16 y == 12 z== 16
X = 32, y = 24, z = 32
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,值将不再改变。
例子问题1:测试
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被创建和填充。如果s中n = #个字符,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,为“abnormal”。在第一部分之后,结果如下:
其他的
,因此它返回以下内容:A + B +神秘(NORMALITI) + E + S
其他的
,因此它返回以下内容:N + O +神秘(RMALI) + T + I
A + B + N + O +神秘(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;我< arr。长度- 2;我+ +)
{
Int temp = arr[i];
Arr [i] = Arr [i+1];
Arr [i+1] = temp;
}
12345
54321
15432
23451
OutOfBoundsException
23451
我们从一个数组开始,加勒比海盗,
大小为5,包含{1,2,3,4,5}。
代码中的循环,
For (int I = 0;我< arr。长度- 2;我+ +)
循环数组,直到第二个到最后一个单元格加勒比海盗。长度- 2
是倒数第二个单元格的索引,它从第一个单元格开始。
让我们看看循环中的代码。
Int temp = arr[i];
Arr [i] = Arr [i+1];
Arr [i+1] = temp;
Arr [0] == 1
Arr [1] == 2
Temp = 1
Arr [0] = 2
Arr [1] = 1
Arr [] == {2,1,3,4,5}
Arr [1] == 1
Arr [2] == 3
Temp = 1
Arr [1] = 3
Arr [2] = 1
Arr [] == {2,3,1,4,5}
当i = 2时
Arr [2] == 1
Arr [3] == 4
Temp = 1
Arr [2] = 4
Arr [3] = 1
Arr [] == {2,3,4,1,5}
Arr [3] == 1
Arr [4] == 3
Temp = 1
Arr [3] = 3
Arr [4] = 1
Arr [] == {2,3,4,5,1}
随着循环的进行,它将移动其中的任何值加勒比海盗[0]
一直到数组的末尾。
例子问题1:程序分析
识别在此程序中可能发生的用户错误
UserInput ui = new UserInput();//从用户输入
int s =(整数)ui;
System.out.println(年代);
用户输入不能是整数
用户永远不会做错任何事
parseInt语句不正确
没什么问题
用户输入不能是整数
用户可以输入一个字符串,而转换为(Integer)将导致运行时异常。如果存在运行时异常,程序将停止并向黑客打开漏洞。一旦黑客知道如何停止程序,他们就可以开始输入坏数据来查看数据库模式以收集数据。解决这个问题的一种方法是使用实用方法,比如parseInt(ui)。