1

This is Main.java

public class Main extends Application {

    RadioButton chkSort;
    RadioButton chkOrder;

    public static void main(String[] args) {

        launch(args);
    }

    public static Comparator<Student> studentIDComparator = new Comparator<Student>() { 
         public int compare(Student std1, Student std2) { 
         String id1 = std1.getID();
         String id2 = std2.getID();
         return id1.compareToIgnoreCase(id2);
         } 
        }; 

    public static Comparator<Student> studentNameComparator = new Comparator<Student>() { 
         public int compare(Student std1, Student std2) { 
         String name1 = std1.getName();
         String name2 = std2.getName();
         return name1.compareToIgnoreCase(name2);
         } 
        };

    public static Comparator<Student> studentLastnameComparator = new Comparator<Student>() { 
         public int compare(Student std1, Student std2) { 
         String last1 = std1.getLastName();
         String last2 = std2.getLastName();
         //ascending order 
         return last1.compareToIgnoreCase(last2);
         }
         //return fruitName2.compareTo(fruitName1); //descending order 
         };

    public static Comparator<Student> studentGPAComparator = new Comparator<Student>() { 
         public int compare(Student std1, Student std2) { 
         String gpa1 = std1.getGPA();
         String gpa2 = std2.getGPA(); 
         return gpa1.compareTo(gpa2);
         }
        };

    @Override   
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("Student Sorting");
        SplitPane splitPane = new SplitPane();
        GridPane grid1 = new GridPane();
        GridPane grid2 = new GridPane();

        grid1.setAlignment(Pos.TOP_LEFT);
        grid1.setVgap(10);
        grid1.setHgap(10);
        grid1.setPadding(new Insets(25,25,25,25));
        grid2.setPadding(new Insets(25,25,25,25));
        Scene scene = new Scene(splitPane, 700, 500);
        primaryStage.setScene(scene);

        Text title = new Text("Student Sorting");
        title.setFont(Font.font("Comic Sans MS", FontWeight.BOLD, 20));

        Text sortBy = new Text("Sort by :");
        sortBy.setFont(Font.font("Calibri", FontWeight.BOLD, 14));

        final ToggleGroup toSelect = new ToggleGroup();
        final ToggleGroup toOrder = new ToggleGroup();

        RadioButton idBtn = new RadioButton("ID");
        idBtn.setToggleGroup(toSelect);

        RadioButton nameBtn = new RadioButton("Name");
        nameBtn.setToggleGroup(toSelect);

        RadioButton lastNameBtn = new RadioButton("Last Name");
        lastNameBtn.setToggleGroup(toSelect);

        RadioButton gpaBtn = new RadioButton("GPA");
        gpaBtn.setToggleGroup(toSelect);

        Text order = new Text("Order :");
        order.setFont(Font.font("Calibri", FontWeight.BOLD, 14));

        RadioButton ascBtn = new RadioButton("Ascending");
        ascBtn.setToggleGroup(toOrder);
        ascBtn.setUserData("asc");

        RadioButton desBtn = new RadioButton("Descending");
        desBtn.setToggleGroup(toOrder);
        desBtn.setUserData("des");

        Button start = new Button("Sort");
        start.setPrefSize(170, 20);

        final TextArea text = new TextArea();
        text.setMinSize(500, 400);

        grid1.add(title, 0, 0);
        grid1.add(sortBy, 0, 2);
        grid1.add(idBtn, 0, 3);
        grid1.add(nameBtn, 0, 4);
        grid1.add(lastNameBtn, 0, 5);
        grid1.add(gpaBtn, 0, 6);
        grid1.add(order, 0, 8);
        grid1.add(ascBtn, 0, 9);
        grid1.add(desBtn, 0, 10);
        grid1.add(start, 0, 13);

        grid2.add(text, 2, 2);
        splitPane.getItems().addAll(grid1, grid2);
        splitPane.setDividerPositions(0.3);

        toSelect.selectedToggleProperty().addListener(new ChangeListener<Toggle> (){
            @Override
            public void changed(ObservableValue<? extends Toggle> value,
                    Toggle t1, Toggle t2) {
                chkSort = (RadioButton) t2.getToggleGroup().getSelectedToggle();
            }           
        });

        toOrder.selectedToggleProperty().addListener(new ChangeListener<Toggle> (){
            @Override
            public void changed(ObservableValue<? extends Toggle> value,
                    Toggle t1, Toggle t2) {
                chkOrder = (RadioButton) t2.getToggleGroup().getSelectedToggle();   
            }

        });

        start.setOnAction(new EventHandler<ActionEvent>(){

            @Override
            public void handle(ActionEvent arg0) {
                String temp =text.getText().toString();
                String[] splitLine = temp.split("\n");
                Student[] stdData = new Student[splitLine.length];
                for(int i=0; i<splitLine.length; i++){
                    String[] stdDataStr = splitLine[i].split(" ");
                    if(stdDataStr[i].length() <4 || stdDataStr[i].equals(null)){
                        text.setText("Invalid input");
                        break;
                    }
                    else {

                        stdData[i].setID(stdDataStr[0]);
                        stdData[i].setName(stdDataStr[1]);
                        stdData[i].setLastName(stdDataStr[2]);
                        stdData[i].setGPA(stdDataStr[3]);

                    }
                }   

                if(chkSort.getText().toString().equals("ID")){
                    if(chkOrder.getText().toString().equals("Ascending")){
                        Student.sort(stdData,studentIDComparator , true);
                    }
                    else{
                        Student.sort(stdData, studentIDComparator, false);
                    }
                }
                else if(chkSort.getText().toString().equals("Name")){
                    if(chkOrder.getText().toString().equals("Ascending")){
                        Student.sort(stdData, studentNameComparator, true);
                    }
                    else{
                        Student.sort(stdData, studentNameComparator, false);
                    }
                }
                else if(chkSort.getText().toString().equals("Last Name")){
                    if(chkOrder.getText().toString().equals("Ascending")){
                        Student.sort(stdData, studentLastnameComparator, true);
                    }
                    else{
                        Student.sort(stdData, studentLastnameComparator, false);
                    }
                }
                else if(chkSort.getText().toString().equals("GPA")){
                    if(chkOrder.getText().toString().equals("Ascending")){
                        Student.sort(stdData, studentGPAComparator, true);
                    }
                    else{
                        Student.sort(stdData, studentGPAComparator, false);
                    }
                }

                for(int i=0 ; i<stdData.length; i++){
                    text.setText(stdData[i].getID()+" "+stdData[i].getName()+" "+stdData[i].getLastName()+" "+stdData[i].getGPA());
                }
            }       
        });

        primaryStage.show();        
    }   
}

This is Student.java

    public class Student {
    private String stdID;
    private String stdName;
    private String stdLastName;
    private String stdGPA;

    public Student(String id, String name, String lastName, String gpa) { 
         super(); 
         this.stdID = id;
         this.stdName = name;
         this.stdLastName = lastName;
         this.stdGPA = gpa;
        } 

    public String getID() {return stdID;} 
    public void setID(String id) { this.stdID =id; } 
    public String getName() {return stdName;} 
    public void setName(String name) { this.stdName= name; }
    public String getLastName() {return stdLastName;} 
    public void setLastName(String lastName) { this.stdLastName = lastName; }
    public String getGPA() {return stdGPA;} 
    public void setGPA(String gpa) { this.stdGPA = gpa; }

    public static void sort(Student[] std, Comparator<Student> c, boolean asc){  
        Student tmp; 
        for (int i=0; i<std.length-1;i++){ 
            for(int j=i+1;j<std.length;j++) 
                if((c.compare(std[i],std[j]) >0 && asc==true) ||(c.compare(std[i],std[j]) <0 && asc==false)) { 
                    tmp = std[i]; std[i] = std[j]; std[j] = tmp; 
                } 
         } 
    }

}

This is where NullPointerException appear

else {
stdData[i].setID(stdDataStr[0]);
stdData[i].setName(stdDataStr[1]);
stdData[i].setLastName(stdDataStr[2]);
stdData[i].setGPA(stdDataStr[3]);   
}

this is my java src then when i try to run i get NullPointerException when it try to setID, setName, setLastName and setGPA what should i do?

Thanks all

3
  • input format >> ID name lastname GPA Commented Apr 15, 2014 at 4:56
  • this is a whole lot of irrelevant code. Please narrow it down and actually state where it is going wrong. Commented Apr 15, 2014 at 5:00
  • possible duplicate of What is a Null Pointer Exception, and how do I fix it? Commented Jul 14, 2015 at 17:41

1 Answer 1

1

You're initializing stdData to be an array of students but you don't create a new Student in each entry and then you try to access a student in an entry where it doesn't exist.

What you should do is, after the lines:

Student[] stdData = new Student[splitLine.length];
    for(int i=0; i<splitLine.length; i++){

add an initialization:

stdData[i] = new Student();

and then continue as you do - later in the code you'll be able to do stuff like:

stdData[i].setID(stdDataStr[0]);

Tip:
When you post a question - try to post only the relevant code, add a stacktrace and mark the line which triggers the compilation/run-time error.

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.