【问题标题】:Move a certain number to the front of an array (Java)将某个数字移动到数组的前面(Java)
【发布时间】:2019-12-11 15:42:01
【问题描述】:

我需要代码方面的帮助,我必须使用随机数字数组将数字“7”放在数组的前面。我使用 Math.random 在每个索引中生成随机数。在这些索引中的任何一个中,都可能生成数字 7。

import java.util.Arrays;

public class NumberShifter {

    public static int[] Array(){
        int[] array = new int[20];
        int max = 10; 
        int min = 1; 
        int rand = 0;
        int range = max - min +1;

        for(int t = 0;t<=array.length-1;t++) {
              rand = (int)(Math.random() * range) + min; 
            array[t] = rand;
        }



    return array;

    }
}

这是我显示的代码的示例输出(所有随机数)

[9, 6, 3, 4, 4, 10, 7, 5, 2, 10, 3, 1, 8, 7, 4, 4, 10, 5, 9, 1]

这个数组中有两个七是随机生成的。

我想要七人组在前面的输出。

[7, 7, 3, 4, 4, 10, 9, 5, 2, 10, 3, 1, 8, 6, 4, 4, 10, 5, 9, 1]

我将如何编写其余代码以实现这一目标?

附:我也是高中生,如果有不对的地方请见谅!

【问题讨论】:

  • 如果 math.rand 没有生成 7 会怎样?
  • @C2H50H 最终会的..
  • @NiVeR 这不是重点。该代码可以很好地生成不出现 7 的序列,因此 C2H50H 的问题是合法的
  • 您可以遍历阵列并标记所有 7 所在的位置,然后将 7 交换到阵列的前面。查看stackoverflow.com/questions/13766209/…
  • @FedericoklezCulloca 确实,我是在讽刺 :)

标签: java arrays


【解决方案1】:

迭代数组的元素,如果它们是7,则将它们与数组开头的下一个元素交换,使用另一个变量来跟踪下一个index进行交换。

int index = 0;
for (int i = 0; i < array.length; i++) {
    if (array[i] == 7) {
        int tmp = array[i]; // actually not needed, we know it's 7
        array[i] = array[index];
        array[index] = tmp; // or just 7
        index++;
    }
}

【讨论】:

  • 如果第一个元素是 7,则实际上存在不必要的复制操作。如果array[index] != 7 但无论如何都会增加索引,那么执行交换操作会是一个好主意吗?
  • @Steyrix 当然,你可以做到。不过,我不想让它变得过于复杂。而且对运行时间的影响很小。
  • 这是我试过的方法!我只是想不通。谢谢。
【解决方案2】:

我实际上会从最后开始,并为七人制保留前面。

   public static int[] Array() {
      int[] array = new int[20];
      int max = 10;
      int min = 1;
      int rand = 0;
      int range = max - min + 1;
      int sevensGoHere = 0;

      for (int t = array.length - 1; t >= sevensGoHere;) {
         rand = (int) (Math.random() * range) + min;
         if (rand == 7) {
            array[sevensGoHere++] = rand;
         }
         else {
            array[t--] = rand;
         }
      }
      return array;

   }

通过动态执行,您无需重新排列数组。

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 2014-08-26
    • 2021-05-15
    • 1970-01-01
    • 2016-04-16
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    相关资源
    最近更新 更多