0

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 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.