计算机科学:测试

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

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

例子问题

例子问题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:测试

的价值是什么xy,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次。的价值xy,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:测试

考虑方法
字符串之谜(String s)
字符串s1 = s.substring(0,1);
字符串s2 = s.substring(1,2);
字符串s3 = s.substring(2, s.length() - 2);
字符串s4 = s.substring(s.length() - 2, s.length() - 1);
字符串s5 = s.substring(s.length() - 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得到最后一个字符。

字符串s1 = s.substring(0,1);
字符串s2 = s.substring(1,2);
字符串s3 = s.substring(2, s.length() - 2);
字符串s4 = s.substring(s.length() - 2, s.length() - 1);
字符串s5 = s.substring(s.length() - 1);

让我们看看第二部分神秘()。

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”。在第一部分之后,结果如下:

s1 = "A"
s2 = "B"
s3 = "NORMALITI"
s4 = "E"
s5 = "S"
因为s大于5个字符,我们取其他的,因此它返回以下内容:
A + B +神秘(NORMALITI) + E + S
接下来,我们重复新的参数。s = NORMALITI,所以在第一部分之后,结果是:
s1 = "N"
s2 = "O"
s3 = "RMALI"
s4 = "T"
s5 = "I"
因为s又比5个字符长,我们取其他的,因此它返回以下内容:
N + O +神秘(RMALI) + T + I
它会被添加到之前的返回值中,变成这样:
A + B + N + O +神秘(RMALI) + T + I + E + S
再一次,我们重复参数s = RMALI。在第一部分之后,结果是:
s1 = "R"
s2 = "M"
s3 = "A"
s4 = "L"
s5 = "I"
因为s的长度小于或等于5个字符,我们取如果这一次。它返回以下内容:
I + l + a + m + r
我们可以用上面的替换mystery(RMALI)的所有实例,所以原始的返回值是这样的:
A + b + n + o + I + l + A + m + r + t + I + e + s
打印出来是ABNOILAMRTIES,答案。

例子问题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;
当i = 0时,
Arr [0] == 1
Arr [1] == 2
Temp = 1
Arr [0] = 2
Arr [1] = 1
Arr [] == {2,1,3,4,5}
当i = 1时
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}
当i = 3时
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)。

大学导师的学习工具