计算数组值

时间:2013-12-11 02:13:28

标签: java arrays

我正在编程测试的介绍。这些类型的问题将在期末考试中进行,我需要帮助完成解决它们的过程(找到数组值)。

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

我可以得到一些答案但不是全部。我需要知道如何手工解决这些类型的问题,而不是编译器。

3 个答案:

答案 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 1 3
  array [1] = 5 1 2
  array [2] = 53 3 35
  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会建议你仔细检查循环是如何迭代的。建议在考试中用纸来解决这些问题