如何更改数组元素的值

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;

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

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

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

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

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

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

如果你澄清了你真正想做的事情,可能会更容易提供帮助。

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

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

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

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

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

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

在Java中

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

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

只需循环它来改变值:

 for(int i=0;i 

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

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

 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);