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