【问题标题】:How to change the value of array elements如何更改数组元素的值
【发布时间】:2009-04-01 00:06:19
【问题描述】:
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;

【问题讨论】:

    标签: java arrays


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      如果您更清楚自己真正想要做什么,可能会更容易提供帮助。

      【讨论】:

      • 谢谢 Uri,我实际上是在做数组排序,这样更容易找到变量的最大值。由于变量 C 是其他变量中的最大值,因此 C 将变为 4,然后变为第二大值 D=3, B=2, A=1。
      • 只需将值放在 ArrayList 中,在其上运行 Collections.sort,然后选择最后一个...这是你的最大值。
      • 为什么不直接使用 Collections.max() ?
      • 我以为他希望所有这些都按顺序排列,而不仅仅是最大化。
      【解决方案3】:

      首先,变量 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];
      

      【讨论】:

      • 我要补充一点,这是真的,因为 int 是值类型。在它们引用类型的地方,变量和数组元素将指向堆上的相同内存。
      • 是的,但是排序仍然只会打乱数组中的引用,不会改变变量...
      • 啊,我没有足够关注 OP 的问题。不,不会是这样。
      【解决方案4】:

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

      在 Java 中,

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            只需循环它以更改值:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-06-18
              • 1970-01-01
              • 2015-05-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-28
              • 2021-04-14
              • 2015-05-09
              相关资源
              最近更新 更多