Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

THE TWO DATA FILES: names.txt: 30 Stefanie Hooton Eleanora R. Blouin Alla Rundle

ID: 3856001 • Letter: T

Question

THE TWO DATA FILES:

names.txt:

30
Stefanie Hooton
Eleanora R. Blouin
Alla Rundle
Dia Gran
Bertie Rathman
Milly T. Edmond
Libbie Filippini
Ruthie Arnwine
Sebastian Biggers
Freida Ravencraft
Angelia Bodkin
Cicely Kandoll
Phebe Nies
Daphine Peil
Yetta Syring
Rudolf Hougland
Leola Straube
Josefa Starbird
Donette Fullmer
Bertie Mirelez
Merry Rathman
Cathern Diamond
Rosalyn Arnwine
Lillian Carew
Lashanda Hendrick
Stepanie Lindo
Elda Ackermann
Valeria Valdovinos
Laurette Wedell
Alla Gran

______________________

names2.txt:

8
Alla Rundle
Dia Gran
Bertie Rathman
Milly T. Edmond
Ruthie Arnwine
Rosalyn Arnwine
Lillian Carew
Alla Gran

LI sorting Names Data ileLoad File Sort First Name Sort Last Name Data file Unsorted list Sorted based on first name Sorted based on last name

Explanation / Answer

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//You can add a constructor to it

class Person{
   String middleName;
   String firstName;
   String lastName;
}

public class SortNamesGUI extends JFrame {
   Person[] nameList;
  
   JTextArea unsortedList;
   JTextArea sortedListFirstName;
   JTextArea sortedListLastName;
  
   JButton loadFile;
   JButton sortByFirst;
   JButton sortByLast;
  
   JTextField loadFileName;
  
   JPanel upperPanel;
   JPanel textAreaPanel;
  
   public SortNamesGUI(){
       super("Sorting Names");
       setSize(800,550);
       setDefaultCloseOperation(super.EXIT_ON_CLOSE);
       setLayout(new BorderLayout());
      
      
       upperPanel = new JPanel();
       //Buttons and their event listeners
       loadFile=new JButton("Load File");
       loadFile.addActionListener(new ActionListener(){

           public void actionPerformed(ActionEvent arg0) {
               boolean result=scanAndLoad(loadFileName.getText());

//The result will be false, if any exception happens in scan and Load
               if(!result){
                   loadFileName.setText("Error!! Wrong File Name");
               }else{
                   StringBuilder text=new StringBuilder();
                 
                   for(int i=0;i<nameList.length;i++){
                       text.append(nameList[i].firstName+" "+nameList[i].lastName+" ");
                   }
                   unsortedList.setText(text.toString());
               }
              
           }
          
          
          
       });
      
      
       sortByFirst=new JButton("Sort By First Name");
       sortByFirst.addActionListener(new ActionListener(){

           public void actionPerformed(ActionEvent arg0) {
                   if(nameList!=null){
                       sortNames(nameList,1);
                       StringBuilder text=new StringBuilder();
                       for(int i=0;i<nameList.length;i++){
                           text.append(nameList[i].firstName+" "+nameList[i].lastName+" ");
                       }
                       sortedListFirstName.setText(text.toString());
                      
                   }
           }
          
       });
      
      
      
       sortByLast=new JButton("Sort By Last Name");
       sortByLast.addActionListener(new ActionListener(){

           public void actionPerformed(ActionEvent arg0) {

//If files have not been loaded, thus data is null.. then do nothing
                   if(nameList!=null){
                       sortNames(nameList,2);
                       StringBuilder text=new StringBuilder();
                       for(int i=0;i<nameList.length;i++){
                           text.append(nameList[i].firstName+" "+nameList[i].lastName+" ");
                       }
                       sortedListLastName.setText(text.toString());
                      
                   }
                  
                   }
       });
      
       loadFileName=new JTextField("Data File",10);
      
      
      
       upperPanel.add(loadFileName);
       upperPanel.add(loadFile);
       upperPanel.add(sortByFirst);
       upperPanel.add(sortByLast);
      
       add(upperPanel,BorderLayout.NORTH);
      
       textAreaPanel=new JPanel();
       unsortedList=new JTextArea("Unsorted Names",30,20);
       sortedListFirstName=new JTextArea("Sorted Based on First Name",30,20);
       sortedListLastName=new JTextArea("Sorted Based on last Name",30,20);
       textAreaPanel.add(unsortedList);
       textAreaPanel.add(sortedListFirstName);
       textAreaPanel.add(sortedListLastName);
      
       add(textAreaPanel);
      
      
       setVisible(true);
   }
   //Sort names by creating custom comparators
   public void sortNames(Person[]arr, int type){
       if(type==1){
           Arrays.sort(arr, new Comparator<Person>() {
                public int compare(Person one, Person other) {
                    return one.firstName.compareTo(other.firstName);
                }
           });
       }else if(type==2){
           Arrays.sort(arr, new Comparator<Person>() {
                public int compare(Person one, Person other) {
                    return one.lastName.compareTo(other.lastName);
                }
           });
       }
   }
  
   //Geting data from file
   public boolean scanAndLoad(String filename){
       File file = new File(filename);
      
       try {
           Scanner in=new Scanner(file);
           int size=in.nextInt();
           in.nextLine();
           Person[] names= new Person[size];
          
           for(int i=0;i<size;i++){
           String nameData[]=in.nextLine().split(" ");
           names[i]=new Person();
          
           names[i].firstName=nameData[0];
           //Fix middle name, if any
           if(nameData.length==3){
               names[i].middleName=nameData[1];
               names[i].lastName=nameData[2];
           }else names[i].lastName=nameData[1];
          
           }
           nameList=names;
           in.close();
           return true;
          
       } catch (FileNotFoundException e) {
           return false;
       }
      
   }
  
   public static void main(String[] args) {
       new SortNamesGUI();
   }

}