How can I simplify my sorting class and user input for my TestStudent program?

  • Thread starter Thread starter major_maths
  • Start date Start date
  • Tags Tags
    Arrays Loops
Click For Summary
SUMMARY

The discussion focuses on simplifying a sorting class and user input handling in the TestStudent program. The original implementation contains redundant cases for handling user responses ('y' and 'Y') and utilizes two response variables, complicating the logic. A proposed solution consolidates the switch statement to handle both 'y' and 'Y' cases together, and suggests eliminating one of the response variables to streamline the do-while loop. This results in cleaner, more maintainable code.

PREREQUISITES
  • Understanding of Java programming language
  • Familiarity with arrays in Java
  • Knowledge of sorting algorithms, specifically selection sort
  • Basic grasp of control flow statements in Java (if, switch, loops)
NEXT STEPS
  • Refactor the TestStudent program to eliminate redundant user input handling
  • Implement error handling for user input to ensure valid scores are entered
  • Explore alternative sorting algorithms for performance comparison
  • Learn about Java's built-in sorting methods for arrays, such as Arrays.sort()
USEFUL FOR

Java developers, software engineers, and students learning about sorting algorithms and user input handling in console applications.

major_maths
Messages
30
Reaction score
0
I'm having issues with a sorting class that I'm trying to call from my main program, TestStudent. I don't think it's taking the user's input correctly when I try to read it into an array but I can't figure out why.

class Student:
Code:
public static void selectionSort(double[] numbers)
    {              
        int min_index;
        double temp;
        for(int i=0; i<numbers.length-1; i++)
        {
            min_index = i;
            for(int j=min_index+1; j<numbers.length; j++)
            {
                if (numbers[j]<numbers[min_index])
                {min_index=j;}
            }
            temp = numbers[min_index];
            numbers[min_index] = numbers[i];
            numbers[i] = temp;
        }
    }

TestStudent:
Code:
System.out.println("Would you like to sort students' scores according to average?");
       String response3 = keyboard.next();
       char letter3 = response3.charAt(0);
       String response4 = "n";
       char letter4 = response4.charAt(0);
       
       double[] number = new double[10];
       do{
           switch (letter3)
           {
               case 'y':
                    System.out.println("Great! Please enter the averages to be sorted.");
                    for(int m=0; m<number.length; m++)
                    {number[m] = keyboard.nextDouble();}

                    Student.selectionSort(number);

                    for(int l=0; l<number.length; l++)
                    {System.out.println(number[l]+" ");}
                    
                    System.out.println("Would you like to sort more student's scores? Please type 'y' or 'n'.");
                    response4 = keyboard.next();
                    break;
                case 'Y':
                    System.out.println("Cool! Please enter the averages to be sorted.");
                    for(int m=0; m<number.length; m++)
                    {number[m] = keyboard.nextDouble();}
                    
                    Student.selectionSort(number);
                    
                    for(int l=0; l<number.length; l++)
                    {System.out.println(number[l]+" ");}
                    
                    System.out.println("Would you like to sort more student's scores? Please type 'y' or 'n'.");
                    response4 = keyboard.next();
                    break;
                case 'n':
                    break;
                case 'N':
                    break;
                default:
                    System.out.println("Could not recognize answer.");
            }
        }while(response3.equalsIgnoreCase("y")&&response4.equalsIgnoreCase("y"));
 
Technology news on Phys.org
major_maths said:
I'm having issues with a sorting class that I'm trying to call from my main program, TestStudent. I don't think it's taking the user's input correctly when I try to read it into an array but I can't figure out why.

class Student:
Code:
public static void selectionSort(double[] numbers)
    {              
        int min_index;
        double temp;
        for(int i=0; i<numbers.length-1; i++)
        {
            min_index = i;
            for(int j=min_index+1; j<numbers.length; j++)
            {
                if (numbers[j]<numbers[min_index])
                {min_index=j;}
            }
            temp = numbers[min_index];
            numbers[min_index] = numbers[i];
            numbers[i] = temp;
        }
    }

TestStudent:
Code:
System.out.println("Would you like to sort students' scores according to average?");
       String response3 = keyboard.next();
       char letter3 = response3.charAt(0);
       String response4 = "n";
       char letter4 = response4.charAt(0);
       
       double[] number = new double[10];
       do{
           switch (letter3)
           {
               case 'y':
                    System.out.println("Great! Please enter the averages to be sorted.");
                    for(int m=0; m<number.length; m++)
                    {number[m] = keyboard.nextDouble();}

                    Student.selectionSort(number);

                    for(int l=0; l<number.length; l++)
                    {System.out.println(number[l]+" ");}
                    
                    System.out.println("Would you like to sort more student's scores? Please type 'y' or 'n'.");
                    response4 = keyboard.next();
                    break;
                case 'Y':
                    System.out.println("Cool! Please enter the averages to be sorted.");
                    for(int m=0; m<number.length; m++)
                    {number[m] = keyboard.nextDouble();}
                    
                    Student.selectionSort(number);
                    
                    for(int l=0; l<number.length; l++)
                    {System.out.println(number[l]+" ");}
                    
                    System.out.println("Would you like to sort more student's scores? Please type 'y' or 'n'.");
                    response4 = keyboard.next();
                    break;
                case 'n':
                    break;
                case 'N':
                    break;
                default:
                    System.out.println("Could not recognize answer.");
            }
        }while(response3.equalsIgnoreCase("y")&&response4.equalsIgnoreCase("y"));

Your code is more complicated than it needs to be, with duplicate cases for 'Y' and 'y' and with two response variables.

You can simplify your switch statement like so:
Code:
           switch (letter3)
           {
               case 'y':
               case 'Y':
                    System.out.println("Cool! Please enter the averages to be sorted.");
                    for(int m=0; m<number.length; m++)
                    {number[m] = keyboard.nextDouble();}
                    
                    Student.selectionSort(number);
                    
                    for(int l=0; l<number.length; l++)
                    {System.out.println(number[l]+" ");}
                    
                    System.out.println("Would you like to sort more student's scores? Please type 'y' or 'n'.");
                    response4 = keyboard.next();
                    break;
                default:
                    System.out.println("Could not recognize answer.");
            }

If the value of letter3 is 'y' execution falls through to the 'Y' case. If the value of letter3 is 'Y', the first case is skipped and execution flows to the 'Y' case.

I removed the 'n' and 'N' cases, since you weren't doing anything with them.

What you should do is eliminate one of your response variables - I don't see the need for two of them. With just one, you can simplify the logic of your do - while loop, and are more likely to figure out what's working and what isn't.
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 75 ·
3
Replies
75
Views
7K
  • · Replies 18 ·
Replies
18
Views
3K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
Replies
8
Views
3K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 5 ·
Replies
5
Views
6K