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

标签 java arrays shift

我正在编写一个程序,它接受用户输入的数字来存储为高分表,用户决定表上有多少数字,然后他们输入他们想要出现在表上的数字,尽管出于某种原因我的将数字放在 table 上的代码不会像 id 那样按降序排列数字。我认为这可能是 printHighScores 函数中的 for 循环的问题,尽管我不明白它有什么问题,它应该继续比较数字以查看它们是否全部按降序排列,但我认为我可能在 for 循环中犯了一个错误操作...

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

  1. 433
  2. 150
  3. 100

而是打印出来

  1. 100
  2. 150
  3. 433

为什么 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;
    }
}

最佳答案

整数的解决方案:

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

关于java - 如何将数组中的数字按降序排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338057/

相关文章:

java - 如何从android中的webview获取url中存在的值?

javascript - 在被调用函数中重新初始化数组

Python:如何使数组的每个项重复,并将相同的项组合在一起

c - 请告诉为什么下面程序的输出是 JKLM??而不是 MLKJ?

math - 如何在verilog中使用算术移位和选择器?

java - 使用 for 循环从 ArrayList 中获取 Drawable[]

java - 使用异常处理消除子类构造函数中不相关的异常

java - DataNucleus Enhancer、JDO 和指定列名

C++ 限制类内动态分配的数组或字符串的大小?

math - 如何在 MOD 表达式中找到变量值?