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
The discussion revolves around issues with a sorting class in a Java program, specifically the TestStudent class, which is intended to sort student scores. The main problem identified is that the program may not be correctly processing user input when reading scores into an array. The sorting method, selectionSort, is correctly implemented, but the input handling is overly complicated. The current implementation has redundant cases for both 'y' and 'Y' in the switch statement, leading to unnecessary complexity. It is suggested to simplify the switch statement by combining the cases for 'y' and 'Y' to reduce duplication. Additionally, the use of two response variables is deemed unnecessary, and it is recommended to streamline the logic by using a single response variable to improve clarity and functionality in the do-while loop. This simplification is expected to help identify any issues more easily and enhance the overall code efficiency.
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.
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 75 ·
3
Replies
75
Views
6K
  • · Replies 18 ·
Replies
18
Views
2K
  • · 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
3K
  • · Replies 7 ·
Replies
7
Views
3K