I have an ArrayList<Clause>
called listtable
. For some reason Clause[] whatever = listtable.toArray()
gives an incompatible types error but Clause[] whatever = listtable.toArray(new Clause[0])
works just fine. Why is this so? What is the difference between the two calls? The javadoc says they are "identical in function".
Here is my full code (the relevant statement is right before the end):
public static Clause[] readCNF(String name,Boolean print) throws IOException
{
BufferedReader file = new BufferedReader(new FileReader("./" + name));
ArrayList<Clause> listtable = new ArrayList<Clause>();
String line = null;
while ((line = file.readLine()) != null) {
if(line.charAt(0) == 'p')
{
Scanner scanner = new Scanner(line);
scanner.next(); scanner.next(); Clause.NumVars = scanner.nextInt(); Clause.NumClauses = scanner.nextInt();
} else if(line.charAt(0) != 'c') {
ArrayList<Integer> lits = new ArrayList<Integer>();
Scanner scanner = new Scanner(line);
while(scanner.hasNext())
{
int var = scanner.nextInt();
if(var != 0){ lits.add(var);}
}
listtable.add(new Clause(lits));
}
}
if(print) {
for(Clause clause : listtable)
{
clause.print();
}
}
return(listtable.toArray(new Clause[0])); //since the return type is Clause[] this is the same as the statements in the question
}