如何将数组中的数字按降序排列?

时间:2014-12-07 00:10:54

标签: java arrays shift

我正在编写一个程序,它接收用户输入的数字作为高分表存储,用户决定桌子上有多少个数字,然后他们输入他们想要出现在桌子上的数字,虽然由于某种原因我的将数字放在表上的代码不会将数字按降序排列为id。我认为这可能是printHighScores函数中的for循环的一个问题,虽然我没有看到它的错误,它应该继续比较数字,看看它们是否都是降序但我想我可能在他的循环中犯了一个错误操作...

我的代码输入数组的大小,然后它接受数字并将它们相应地存储在它们的数组位置,虽然它不进行计算以按降序存储它们? 如果用户将数组的大小键入为3,并输入100,150,433,我希望代码对其进行排序以便输出

  1. 433
  2. 150
  3. 100
  4. 而不是打印

    1. 100
    2. 150
    3. 433
    4. 为什么for循环计算不起作用,是否有更好的方法来整理数组中的元素以使它们按降序排列?

      这是我的代码,感谢您的帮助:

      import java.util.Scanner;
      /*
       * Write a program to maintain a list of the high scores obtained in a game.  
       * The program should first ask the user how many scores they want to maintain and then repeatedly accept new scores
       * from the user and should add the score to the list of high scores (in the appropriate position) if it is higher than any of the existing high scores.
       *   You must include the following functions:
      
          -initialiseHighScores () which sets all high scores to zero.
      
          -printHighScores() which prints the high scores in the format: 
              “The high scores are 345, 300, 234”, for all exisiting high scores in the list (remember that sometimes it won’t be full).
      
          -higherThan() which takes the high scores and a new score and returns whether the passed score is higher than any of those in the high score list.
      
          -insertScore() which takes the current high score list  and a new score and updates it by inserting the new score at the appropriate position in the list
       */
      public class HighScores {
      
          public static void main(String[] args) {
      
              Scanner input = new Scanner(System.in);
              System.out.print("How many values would you like to set the High Score list too?:");
              int userInput = input.nextInt();
              int[] zeroSet = {};
              int[] setScores = intialisingHighScores(userInput, zeroSet);
              System.out.println("Now Enter the high scores you wish to display:");
              int[] highScores = printHighScores(setScores, userInput);
              System.out.println("The high scores are:");
      
              for (int i = 0; i <= (userInput-1); i++){
                  System.out.println((i+1) + ". " + highScores[i]);
              }
          }
          public static int[] intialisingHighScores(int userInput, int[] zeroSet){
              zeroSet = new int [userInput];
              for (int index = 0; index <= (userInput-1); index++)
              {
                  zeroSet[index] = 0;
              }
      
              return zeroSet;
          }
          public static int[] printHighScores(int[] setScores, int userInput) {
              Scanner inputNo = new Scanner(System.in);
              int[] setScore = {};
              for (int i = 0; i <= (userInput-1); i++)
              {
                  int scores = inputNo.nextInt();
                  if(scores<0){
                      System.out.println("No player can be that bad, please enter positive high scores only");
                      scores = inputNo.nextInt();
                      setScores[i] = scores;
                  }
                  else {
                      setScores[i] = scores;
                  }
              }
              for (int i = 0; i >= (userInput-1); i++){
                  for (int n = 0; n <= (userInput-1); n++){
                      if (setScore[i] < setScore[n]){
                          int saveNo = 0;
                          for (int p = (userInput-1); p >= 0; p--){
                              setScore[i] = saveNo;
                              setScore[p] = setScore[p+1];
                          }
                          setScore[userInput-1] = saveNo;
                      }
                  }
              }
              return setScores;
          }
          public static int[] higherThan(int[] printHighScores, int[] setScores){
              return setScores;
          }
      }
      

1 个答案:

答案 0 :(得分:1)

整数解决方案:

Arrays.sort(array, Collections.reverseOrder());

或者您可以使用Arrays.sort(array);然后将其反转。

for(int i = 0; i < array.length / 2; i++){
    int temp = array[i];
    array[i] = array[array.length - i - 1];
    array[array.length - i - 1] = temp;
}