【问题标题】:Descending selection sort with output during execution执行期间带有输出的降序选择排序
【发布时间】:2020-09-01 16:25:37
【问题描述】:

编写一个 void 方法 selectionSortDescendTrace() ,它接受一个整数数组,并将数组按降序排序。该方法应使用嵌套循环,并在外循环每次迭代后输出数组,从而输出数组 N-1 次(其中 N 是大小)。完成 main() 以读取最多 10 个正整数(以 -1 结尾)的列表,然后调用 selectionSortDescendTrace() 方法。

如果输入是:

20 10 30 40 -1

那么输出是:

40 10 30 20
40 30 10 20
40 30 20 10

我的代码:

import java.util.Scanner;

public class MyProgram {

public static void selectionSortDescendTrace( int [] numbers, int numElements)
{
    for (int i = 0; i < numbers.length - 1; i++) {
        if(numbers[i] > 0) {
        int maxElementIndex = i;
        for (int j = i + 1; j < numbers.length; j++) {
            if (numbers[maxElementIndex] < numbers[j]) {
                maxElementIndex = j;
            }
        }
            int temp = numbers[i];
            numbers[i] = numbers[maxElementIndex];
            numbers[maxElementIndex] = temp;
            
            for (int element: numbers) {
                 if(element > 0)
                    System.out.print(element + " ");
                }
                 System.out.println("");
            }
     }
}
   
public static void main(String[] args){  
    Scanner scnr = new Scanner(System.in);
    
    int input, i = 0;
    int numElements = 0;
    int [] numbers = new int[10];
    
    do{
        input = scnr.nextInt();
        if(input != -1){
           numbers[i] = input;
           i++;
           numElements++;
        }
        
        }while(input != -1);
           selectionSortDescendTrace(numbers, numElements);
    
}  

}

我的输出是:

40 10 30 20
40 30 10 20
40 30 20 10
40 30 20 10

我不确定为什么它重复最后一行两次...请帮助。

【问题讨论】:

    标签: java selection selection-sort


    【解决方案1】:

    问题出在 selectionSortDescendTrace 方法的 for 循环中。因为循环运行numbers.length - 1 次 (for (int i = 0; i &lt; numbers.length - 1; i++))。 numbers.length 是 10,因为您在 main 方法中将数组的长度定义为 10。

    如果您像这样更改 selectionSortDescendTrace 方法的第一个 for 循环中的条件,它应该可以工作:

    public static void selectionSortDescendTrace(int[] numbers, int numElements) {
        for (int i = 0; i < numElements - 1; i++)
            if (numbers[i] > 0) {
                //...
    

    This question 可能有助于了解如何查找此类错误。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      相关资源
      最近更新 更多