I created a function that gets an array of objects and the type(String) of the abject and returning an array of objects with a specific type and after that, I tried to print it but it only print the first 1, not sure what went wrong. The objects are Tables:
public class q2Table { private String color; private int length; private int width; private int height; private String type;
//I made a full contractor:
public q2Table(String color, int length, int width, int height, String type) { this.color = color; this.length = length; this.width = width; this.height = height; this.type = type; }
//and a setter getter for each :
public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public String getType() { return type; } public void setType(String type) { this.type = type; }
//I created a main class and also and random array of objects:
q2Table[] myTable = new q2Table[5]; myTable[0] = new q2Table("Yellow" , 20 , 20 , 20 , "Round"); myTable[1] = new q2Table("White" , 22 , 22 , 22 , "Rectangle"); myTable[2] = new q2Table("Purple" , 21 , 21 , 21 , "Round"); myTable[3] = new q2Table("Blue" , 21 , 21 , 21 , "Traingle"); myTable[4] = new q2Table("Green" , 21 , 21 , 21 , "Round");
Created the function I asked about in the beginning :
public static q2Table[] tableTypeArr(q2Table[] tables,String t) { // Getting the index i need for the returning array String type = t; int i , x=0 , j; for(i=0;i<tables.length;i++) { if(tables[i].getType()==type) { x++; } } //creating the returning array q2Table[] types = new q2Table[x]; for(j=0;j<types.length;j++) { if(tables[j].getType()==type) { types[j]=tables[j]; } } return types; }
//created two Arrays of objects, 1 with random objects that suppose to enter the function and a //receiving //Array of objects to print:
q2Table[] testTable = new q2Table[3]; testTable = tableTypeArr(myTable , "Round"); int i; for(i=0;i<testTable.length;i++) { System.out.println(testTable[i].getColor() + " "+ testTable[i].getHeight() + " "+testTable[i].getLength()+" " +testTable[i].getWidth()+" "+testTable[i].getType() ); }
//I successfully printed the first object and after that got an error in the terminal:
Yellow 20 20 20 Round Exception in thread “main” java.lang.NullPointerException: Cannot invoke “lab4.q2Table.getColor()” because “testTable[i]” is null at lab4.q2Main.main(q2Main.java:70)
Advertisement
Answer
Your String comparison is wrong: you do: tables[j].getType()==type
you should do: tables[j].getType().equals(type)
. So when you fill your array in your tableTypeArr
you only pick one record and not 3 as you thought. So, when you try to iterate through your testTable, it only holds one record and 2 null values. So you print the first and on the second element you get your NPE (NUllPointerException). You can verify all this in debug.