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

huangapple go评论58阅读模式
英文:

Descending selection sort with output during execution

问题

以下是你提供的代码的中文翻译和修正后的版本:

import java.util.Scanner;

public class MyProgram {

    public static void selectionSortDescendTrace(int[] numbers, int numElements) {
        for (int i = 0; i < numElements - 1; i++) {
            int maxElementIndex = i;
            for (int j = i + 1; j < numElements; j++) {
                if (numbers[maxElementIndex] < numbers[j]) {
                    maxElementIndex = j;
                }
            }
            int temp = numbers[i];
            numbers[i] = numbers[maxElementIndex];
            numbers[maxElementIndex] = temp;

            for (int k = 0; k < numElements; k++) {
                System.out.print(numbers[k] + " ");
            }
            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);
    }
}

请注意,我对代码进行了一些修正,以解决重复输出最后一行的问题。主要的修正包括:

  1. selectionSortDescendTrace方法中,将循环的终止条件由numbers.length - 1改为numElements - 1,以确保只对输入的有效元素进行排序。
  2. 在内层循环中,将循环的终止条件由numbers.length改为numElements,同样是为了只考虑有效元素。
  3. 在输出排序后的数组时,使用循环变量k遍历数组并输出每个元素,这将确保只输出有效元素。

这些修正应该能够解决你提到的输出重复问题。

英文:

Write a void method selectionSortDescendTrace() that takes an integer array, and sorts the array into descending order. The method should use nested loops and output the array after each iteration of the outer loop, thus outputting the array N-1 times (where N is the size). Complete main() to read in a list of up to 10 positive integers (ending in -1) and then call the selectionSortDescendTrace() method.

If the input is:

> 20 10 30 40 -1

then the output is:

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

My code:

import java.util.Scanner;
public class MyProgram {
public static void selectionSortDescendTrace( int [] numbers, int numElements)
{
for (int i = 0; i &lt; numbers.length - 1; i++) {
if(numbers[i] &gt; 0) {
int maxElementIndex = i;
for (int j = i + 1; j &lt; numbers.length; j++) {
if (numbers[maxElementIndex] &lt; numbers[j]) {
maxElementIndex = j;
}
}
int temp = numbers[i];
numbers[i] = numbers[maxElementIndex];
numbers[maxElementIndex] = temp;
for (int element: numbers) {
if(element &gt; 0)
System.out.print(element + &quot; &quot;);
}
System.out.println(&quot;&quot;);
}
}
}
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);
}  
}

My output is:

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

Im not sure why its repeating the last line twice... Please help.

答案1

得分: 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 &lt; numElements - 1; i++)
        if (numbers[i] &gt; 0) {
            //...

这个问题 可能有助于理解如何查找类似这样的错误。

英文:

The problem is in the for loop of your selectionSortDescendTrace method. Becaues the loop runs numbers.length - 1 times (for (int i = 0; i &lt; numbers.length - 1; i++)). numbers.length is 10, because you define the length of the array as 10 in your main method.

If you change the condition in the first for loop of the selectionSortDescendTrace method like this it should work:

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

This question might be helpfull to understand how to find bugs like this.

huangapple
  • 本文由 发表于 2020年9月1日 09:43:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/63680218.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定