如何更改数组元素的值

时间:2009-04-01 00:06:20

标签: java arrays

int A = 300;
int B = 400;
int C = 1000;
int D = 500;

int []abcd = {A,B,C,D};
Arrays.sort(abcd);   // the sequence of array elements will be {300, 400, 500,1000}

我想根据它们在排序后在数组中的位置来改变变量A,B,C,D的值。

例如变量A位于索引0处,因此A的值更改为1而不是300,     变量B位于索引1处,因此B的值变为2而不是400,     变量D位于索引2处,因此D的值变为3而不是500,     变量C位于索引3处,因此C的值变为4而不是1000,

变量的最终值将是: A = 1; B = 2; C = 4; D = 3;

8 个答案:

答案 0 :(得分:6)

一种天真的方法是遍历数组的每个元素,随时检查值:

for (int i = 0; i < abcd.length; i++)
{
    if (abcd[i] == A)
    {
        A = i+1;
    }
}
// Rinse and repeat for B, C, D

如果采用这种方法,当然,将其转换为接受数组的函数,要搜索的值,并在数组中返回其索引。

答案 1 :(得分:5)

我认为你误解了原语数组的工作方式。当您创建数组int [] abcd = {A,B,C,D}时,它不包含变量A,B,C和D,它应包含其值的副本。

因此,当您对它们进行排序时,实际上对A,B,C或D没有任何影响。

实现与您尝试做的事情接近的一种方法是使用有序映射,其中每个值将映射到值持有者,然后您可以迭代键(按排序顺序)并分配每个价值持有人的序号。

如果您澄清更多关于您真正想做的事情,可能会更容易提供帮助。

答案 2 :(得分:1)

首先,变量 A,B,C和D没有“数组中的位置”。你所做的是创建一个包含4个插槽的空白数组,并影响位置0,1,2和3中这些变量的

对数组进行排序时,(再次)在数组的插槽之间进行混洗,但sort()对变量A,B,C和D一无所知,所以他们的值保持不变。如果您希望这些更改,您需要通过使用每个插槽的位置重新影响值到变量中:

A = abcd[0];
B = abcd[1];
C = abcd[2];
D = abcd[3];

答案 3 :(得分:0)

不要对它们进行排序。将它们放在一个数组中,将第二个数组初始化为全零,并计算每个元素大于或等于的项数。然后只需将这些计数转移回变量。

答案 4 :(得分:0)

您想要的是从值到数组位置的映射。除非有办法从Arrays.sort()中获取这样的映射,我怀疑(尽管我不是Java专家),你需要自己生成映射。你可以通过搜索数组来做到这一点。实现自己的排序可能更有效,这样您就可以在排序数组时跟踪映射。

答案 5 :(得分:0)

您是在寻找数组元素访问的语法还是更复杂的东西?

在Java中,

abcd [2] = 500; abcd [3] = 1000;

将进行您正在寻找的修改。

答案 6 :(得分:0)

只需将其循环以更改值:

for(int i=0;i<abcd.length;i++){
      abcd[i] = i+1;
 }
System.out.println(Array.toString(abcd));

答案 7 :(得分:-1)

很高兴知道你到底想做什么。

这种接缝更像是一个测验。 我的解决方案是这样的:

Arrays.sort(abcd);
A = Arrays.binarySearch(abcd, A) + 1;
B = Arrays.binarySearch(abcd, B) + 1;
C = Arrays.binarySearch(abcd, C) + 1;
D = Arrays.binarySearch(abcd, D) + 1;

假设时间不是问题和独特的价值......

或,

如果允许,创建一个可变的Integer来代替原语int:

Int A = new Int(300);
Int B = new Int(400);
Int C = new Int(1000);
Int D = new Int(500);

Int []abcd = {A,B,C,D};
Arrays.sort(abcd);
for (int i = 0; i < abcd.length; i++)
    abcd[i].setInt(i+1);