首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建一个从1到10的随机数组。然后,将所有7移到java中数组的前面

创建一个从1到10的随机数组。然后,将所有7移到java中数组的前面
EN

Stack Overflow用户
提问于 2020-01-29 10:57:19
回答 3查看 204关注 0票数 2

创建一个从1到10的随机数组。然后,将所有的7移到数组的前面。其他数字的顺序并不重要,只要所有数字都跟随幸运7的组。查看插入、排序和选择排序的代码可能对此任务非常有帮助。Arrays.toString()也会很有用。例如,如果给出列表::4 5 6 7 1 2 3 7,则列表可能变成-所有7都必须是first ::7 7 6 4 1 2 3 5

我的代码:

代码语言:javascript
运行
复制
public class NumberShifter
{

public int[] go(int[] arrayToBeShifted, int index)
{
  int originalArray[] = new int[index];
  int valueBeingMoved = originalArray[index];

  for (int i = index; i > 0; i--) 
  {
    arrayToBeShifted[i] = arrayToBeShifted[i-1];
  }

  arrayToBeShifted[0] = valueBeingMoved;

  return arrayToBeShifted;
}
}

跑步者:

代码语言:javascript
运行
复制
class Main
{
  public static void main(String[] args) 
  {
    int random[] = new int[10];
    for(int i=0; i<random.length; i++)
    {
      random[i] = (int)(Math.random()*6)+1;
    }
    NumberShifter rt = new NumberShifter();   
    System.out.println(rt.go(random,7));
    System.out.println(rt.go(random,7));
    System.out.println(rt.go(random,7));
    System.out.println(rt.go(random,7));
  }
}

这个程序给了我错误请任何人告诉我我使用了正确的方法来解决这个问题。如果我在这个问题上用了错误的方法,请用正确的方法解决。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-31 05:24:42

这就是我解决问题的方法,我为代码创建了两个独立的类runner和main。

我的代码:

代码语言:javascript
运行
复制
public class NumberShifter
{

public int[] go(int[] arrayToBeShifted, int index)
{
  for (int i = 0, e = 0; i < arrayToBeShifted.length; i++) 
  {
    if (arrayToBeShifted[i] == 7)
    {
    arrayToBeShifted[i] = arrayToBeShifted[e];
    arrayToBeShifted[e] = 7;
    e++;
    }
  }
  return arrayToBeShifted;
}
}

跑步者:

代码语言:javascript
运行
复制
class Runner
{
  public static void main(String[] args) 
  {
    NumberShifter rt = new NumberShifter();  
  //demo to see  if code works
    System.out.println(java.util.Arrays.toString(rt.go(new int[]{1, 10, 9, 2, 8, 2, 5, 6, 10, 7, 9, 8, 6, 7, 2, 7, 6, 10, 5, 3},7)));

  //random arrays according to question
  int random[] = new int[20];
    for(int i=0; i<random.length; i++)
    {
      random[i] = (int)(Math.random()*10)+1;
    }
     System.out.println(java.util.Arrays.toString(rt.go(random,7)));
    System.out.println(java.util.Arrays.toString(rt.go(random,7)));
    System.out.println(java.util.Arrays.toString(rt.go(random,7)));

  }

}
票数 0
EN

Stack Overflow用户

发布于 2020-01-29 11:36:32

问题出在NumberShifter

代码语言:javascript
运行
复制
int originalArray[] = new int[index];
int valueBeingMoved = originalArray[index];

您正在创建一个大小为[index]的数组。假设是index = 7,因此它的索引值为0、1、2…6,但是在下一行中,您访问的是不存在的originalArray[index] (originalArray7)。所以你得到了异常。

除此之外,您的代码还存在其他问题。

我想建议这个非常简单的方法:

代码语言:javascript
运行
复制
public class Main {

    public static void main(String[] args) {
        int random[] = {4, 7, 6, 5, 7, 8, 0, 7, 1, 7};

        printArray(random);
        move7sToFirst(random);
        printArray(random);
    }

    public static void move7sToFirst(int[] random) {
        for (int i = 0; i < random.length; i++) //traverse array to find 7s
            if (random[i] == 7)                 //if 7 found
                for (int j = 0; j < i; j++)     //traverse from beginning to index before 7 to find non-7
                    if (random[j] != 7)         //if non-7 found
                        swap(random, i, j);     //swap 7 with non-7
    }

    public static void swap(int[] random, int index1, int index2) {
        int temp = random[index1];
        random[index1] = random[index2];
        random[index2] = temp;
    }

    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++)
            System.out.print(arr[i] + " ");
        System.out.println("");
    }
}

输出:

代码语言:javascript
运行
复制
4 7 6 5 7 8 0 7 1 7 
7 7 7 7 4 6 5 8 0 1 

当然,这是最简单的方法,时间复杂度为O(n^2)。这可以通过为下一次迭代记住索引来改进,并且可以显着降低时间复杂度,几乎可以将其提高到O(n)。

票数 0
EN

Stack Overflow用户

发布于 2020-01-29 11:42:41

在您的逻辑中有多个不准确的地方,我已经修复了代码,下面应该可以解决您的问题

代码语言:javascript
运行
复制
public class NumberShifter{
   public static void main(String[] args){
      int[] array = {7,7,1,1,2,3,4,7,7,7,5,7};
      for(int i=0;i<array.length;i++){
         System.out.print(" "+array[i]);
      }
      shift7s(array);
      System.out.println("\n");
      for(int i=0;i<array.length;i++){
         System.out.print(" "+array[i]);
      }
   }

   public static void shift7s(int[] array) {
      int i = 0;
      int j = array.length -1;
      while(i < j){
         i = getIndexOfNextNonSeven(array, i);
         j = getIndexOfNextSeven(array, j);
         if(i == array.length || j < 0) break;
         if(i < j){
            swap(array, i, j);
         }
      }
   }

   private static int getIndexOfNextNonSeven(int[] array, int currentIndex){
      while(currentIndex < array.length &&
              array[currentIndex] == 7 ){
         currentIndex++;
      }
      return currentIndex;
   }

   private static int getIndexOfNextSeven(int[] array, int currentIndex){
      while(currentIndex < array.length &&
              array[currentIndex] != 7 ){
         currentIndex--;
      }
      return currentIndex;
   }

   private static void swap(int[] array, int p1, int p2){
      int temp = array[p1];
      array[p1] = array[p2];
      array[p2] = temp;
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59959919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档