我正在编程测试的介绍。这些类型的问题将在期末考试中进行,我需要帮助完成解决它们的过程(找到数组值)。
1)
int[] array = new int [6];
for ( int i = 0 ; i < array.length ; i++ )
{
array [i] = i*i;
}
for ( int i = 0 ; i < array.length ; i = i + 2 )
{
array[i] = array[i] + array[ i + 1 ];
}
教授给出的答案。 我:4
pos:0 1 2 3 4 5
值:1 1 13 9 41 25
2)
int[] array = new int [6];
for ( int i = 0 ; i < array.length ; i++ )
{
array [i] = i*i;
}
for ( int i = 0 ; i < array.length ; i = i + 2 )
{
array[array.length - 1 - i] = array[i] + array[ i + 1 ];
}
再次回答 我:4
pos:0 1 2 3 4 5
值:0 17 4 13 16 1
我可以得到一些答案但不是全部。我需要知道如何手工解决这些类型的问题,而不是编译器。
答案 0 :(得分:2)
美好的一天,
在解决这些问题时,您需要了解以下几个重要概念:
在Java中,与许多其他编程语言一样,数组的第一个索引始终是&#39; 0&#39;&#39;&#39;因此,当您遍历数组的各个单元格时,始终从0开始直到数组的(size-1)。
.length是一个返回数组大小的静态字段。
因此,如果我们解决您的第一个问题:
int[] array = new int [6];
// Size of the array is 6, so array.length returns 6
// Which also means that valid cells are from 0 to 5 inclusively.
// Here we say, for i that starts at 0, as long as i is smaller than 6 (your array
// length, perform the body of the loop. Everytime you do it, increase i by 1.
for ( int i = 0 ; i < array.length ; i++ )
{
array [i] = i*i;
}
//This does the following:
// array[0] = 0*0; -> array[0] = 0;
// array[1] = 1*1; -> array[1] = 1;
// array[2] = 2*2; -> array[2] = 4;
// array[3] = 3*3; -> array[3] = 9;
// array[4] = 4*4; -> array[4] = 16;
// array[5] = 5*5; -> array[5] = 25;
// and the loop stops.
//Now the second loop: same thing as the first loop but we increase i by 2 instead of 1
for ( int i = 0 ; i < array.length ; i = i + 2 )
{
array[i] = array[i] + array[ i + 1 ];
}
// This does the following:
// array[0] = array[0] + array[0+1] -> array[0] = 0 + 1; -> array[0] = 1;
// array[2] = array[2] + array[1+1] -> array[2] = 4 + 9; -> array[2] = 13
// array[4] = array[4] + array[4+1] -> array[4] = 16 + 25 -> array[4] = 41
// And we stop because i=4, so i= i+2 = 6, which is larger than array.length (5)
因此我们有:
array[0] = 1
array[1] = 1
array[2] = 13
array[3] = 9
array[4] = 41
array[5] = 25
我希望这会对您的测试有所帮助并带来好运,
亚历
答案 1 :(得分:1)
好吧,因为你的问题是关于如何手动解决这些问题,我建议如下:
一旦你到达问题,就在一张纸上写下数组并为每个索引创建一个新行。因此,如果你的数组是int [] array = new int [4]
,你会写:
array [0] =
数组[1] =
array [2] =
array [3] =
然后,您将逐步完成程序,只要有数组位置的赋值,就可以在相应的行中编写它。现在,如果那里已有值,则只需越过该值,并将新值写入if的右侧。
这样你最终会得到这样的东西:
array [0] =
1 3 5 13
array [1] =5 12
array [2] =53 335
array [3] = 2
最终值始终是最右边的值。我觉得这种技术最方便,也是最快的(在考试中一直很重要)。您还可以通过查看划掉的值来回溯您的步骤,以防您第二次猜测自己。
答案 2 :(得分:0)
在第一个问题中:
第一个循环就是迭代数组并填充数组......这就是索引本身的乘法
所以数组为0 * 0,1 * 1,2 * 2,3 * 3,4 * 4,5 * 5
并且在第二个循环中i增加2个位置,因此,我们只修改数组的0,2,4个位置。第0位是0 + 1 = 1,第2位是4 + 9 = 13,第4位是16 + 25 = 41;这就是最终数组为1,1,13,9,41,25
的原因在第二个问题中:第一个循环与第一个问题完成相同的工作; 在第二个循环中,循环将被执行三次,因为i = 0,2,4。 在第一个循环数组值为0,1,4,9,16
之后for i=0 ; array[6-1-0]=array[0]+array[1]=> array[5]=0+1 =1;
for i=2 ; array[6-1-2]=array[2]+array[3]=> array[3]=4+9 = 13;
for i=4 ; array[6-1-4]=array[4]+array[5]=> array[1]=16+1= 17;
所以最终的数组是:0,17,4,13,16,1
In会建议你仔细检查循环是如何迭代的。建议在考试中用纸来解决这些问题