Reputation: 13
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
Upvotes: 1
Views: 583
Reputation: 53525
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.
Upvotes: 1