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
AI Thread 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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...

Similar threads

Back
Top