微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

执行过程中,输出结果按降序排序

如何解决执行过程中,输出结果按降序排序

编写一个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

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

解决方法

问题出在您的selectionSortDescendTrace方法的for循环中。因为循环运行numbers.length - 1次(for (int i = 0; i < 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可能对了解如何查找此类bug很有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。