簡體   English   中英

創建一個從 1 到 10 的隨機數組。然后,在 java 中將所有 7 移動到數組的前面

[英]Create a random array of numbers from 1 – 10. Then, move all of the 7s to the front of the array in java

從 1 到 10 創建一個隨機數組。然后,將所有 7 移到數組的前面。 其他號碼的順序並不重要,只要所有號碼都跟在幸運 7 組之后即可。 查看插入排序和選擇排序的代碼可能對這個作業很有幫助。 Arrays.toString() 也很有用。 例如,如果給定列表:: 4 5 6 7 1 2 3 7 列表可能變成 – 所有 7 必須在前面:: 7 7 6 4 1 2 3 5

我的代碼:

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

亞軍:

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

這個程序給我錯誤請任何人告訴我我使用正確的方法來解決這個問題。 如果我對這個問題使用了錯誤的方法,請用正確的方法解決這個問題。

問題出在NumberShifter中:

int originalArray[] = new int[index];
int valueBeingMoved = originalArray[index];

您正在創建一個大小為[index]的數組。 假設index = 7 ,所以它的索引值為 0, 1, 2...6 但是在下一行中,您正在訪問不存在的originalArray[index] (originalArray[7]) 。 所以你得到了例外。

除此之外,您的代碼還有其他問題。

我想建議這種非常簡單的方法:

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("");
    }
}

輸出:

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

您的邏輯中存在多個不准確之處,我已修復代碼,以下應該可以解決您的問題

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

這就是我解決問題的方法,我為代碼創建了兩個單獨的類 runner 和 main。

我的代碼:

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

亞軍:

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

  }

}

創建一個從 1 到 10 的隨機數字數組。然后,將所有 7 移到數組的前面。 其他數字的順序並不重要,只要所有數字都遵循幸運 7 的組即可。 查看插入排序和選擇排序的代碼可能對這個作業非常有幫助。 Arrays.toString() 也很有用。 例如,如果給你一個列表 :: 4 5 6 7 1 2 3 7 列表可能變成——所有 7 必須是第一個 :: 7 7 6 4 1 2 3 5

我的代碼:

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

跑者:

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

這個程序給了我錯誤請任何人告訴我我使用正確的方法來解決這個問題。 如果我對這個問題使用了錯誤的方法,請用正確的方法解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM