英文:
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);
}
}
请注意,我对代码进行了一些修正,以解决重复输出最后一行的问题。主要的修正包括:
- 在
selectionSortDescendTrace
方法中,将循环的终止条件由numbers.length - 1
改为numElements - 1
,以确保只对输入的有效元素进行排序。 - 在内层循环中,将循环的终止条件由
numbers.length
改为numElements
,同样是为了只考虑有效元素。 - 在输出排序后的数组时,使用循环变量
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 < 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);
}
}
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 < 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) {
//...
这个问题 可能有助于理解如何查找类似这样的错误。
英文:
The problem is in the for loop of your selectionSortDescendTrace
method. Becaues the loop runs numbers.length - 1
times (for (int i = 0; i < 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 < numElements - 1; i++)
if (numbers[i] > 0) {
//...
This question might be helpfull to understand how to find bugs like this.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论