Reputation: 1
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.
Upvotes: 0
Views: 8053
Reputation: 2575
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.
Upvotes: 1