Ciao a tutti,
sto svolgendo un programma sui cluster, pensando di aver fatto bene la classe Data, invece quando lo faccio girare mi esce l'eccezione:
Exception in thread "main" java.lang.NullPointerException
at data.Data.<init>(Data.java:59)
at data.Data.main(Data.java:207)
Perchè? potreste aiutarmi?
grazie in anticipo
il codice è il seguente:
package data;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.text.AttributeSet;
import database.DatabaseConnectionException;
import database.DbAccess;
import database.EmptySetException;
import database.Example;
import database.NoValueException;
import database.QUERY_TYPE;
import database.TableData;
import database.TableSchema;
import database.TableSchema.Column;
public class Data {
private List<Example> data;
private int numberOfExamples;// cardinalita' dell'insieme di transazioni (numero di righe in data)
private List<Attribute> attributeSet;// un vettore degli attributi in ciascuna tupla (schema della tabella di dati)
public Data(String table) throws EmptyDatasetException, DatabaseConnectionException,SQLException, EmptySetException, NoValueException{
//data
data = new ArrayList<Example>();
DbAccess db = new DbAccess();
TableData tableData=new TableData(db);
data = tableData.getDistinctTransazioni(table);
int index=0;
db.initConnection();
TableSchema sch;
try{
sch = new TableSchema(new DbAccess(), table);
data = tableData.getDistinctTransazioni(table);
numberOfExamples = data.size();
attributeSet = new LinkedList<Attribute>();
for (Column c: sch){ //exception...at data.Data.<init>(Data.java:59)
if (c.isNumber()){
attributeSet.add(new ContinuousAttribute(c.getColumnName(),index, (Double) tableData.getAggregateColumnValue(table, c, QUERY_TYPE.MIN), (Double) tableData.getAggregateColumnValue(table, c, QUERY_TYPE.MAX)));
index++;
} else{
String[] x = (String[]) tableData.getDistinctColumnValues(table, c).toArray(new String[0]);
attributeSet.add(new DiscreteAttribute(c.getColumnName(),index, x));
index++;
}
}
} catch (SQLException e){
e.printStackTrace();}
DbAccess.closeConnection();
}
public int getNumberOfExamples(){
return numberOfExamples;
}
public int getNumberOfExplanatoryAttributes(){
return attributeSet.size();
}
int getNumberOfAttributes(){
return attributeSet.size();
}
public Object getAttributeValue(Object array, int attributeIndex){
return data.get((Integer) array).get(attributeIndex);
}
Attribute getAttribute(int index){
return attributeSet.get(index);
}
public Tuple getItemSet(int index){
Tuple tuple = new Tuple(attributeSet.size());
for(int i = 0; i < attributeSet.size(); i++){
if(attributeSet.get(i) instanceof DiscreteAttribute)
// tuple.add(new DiscreteItem((DiscreteAttribute) attributeSet.get(i), (String)getAttributeValue(index,i)) ,i);
tuple.add(new DiscreteItem((DiscreteAttribute)(attributeSet.get(i)),(String)(data.get(index).get(i))), i);
else
// tuple.add(new ContinuousItem((ContinuousAttribute) attributeSet.get(i), (double)getAttributeValue(index,i)) ,i);
tuple.add(new ContinuousItem((ContinuousAttribute)(attributeSet.get(i)), (double)(data.get(index).get(i))), i);
}
return tuple;
}
public String toString(){
String container = new String();
for(Attribute a: attributeSet){
container = container + a + " ";
}
container += "\n";
for(int i=0; i<getNumberOfExamples(); i++)
{
container += i;
container += ": ";
// for(int j=0; j<attributeSet.size(); j++){
for(int j = 0; j<getNumberOfExplanatoryAttributes(); j++){
container += data.get(i).get(j);
if(j < getNumberOfExplanatoryAttributes() - 1){
container+= ",";
}
}
container += "\n";
}
return container;
}
public static void main(String args[]) throws DatabaseConnectionException, SQLException, EmptySetException, NoValueException{
Data trainingSet;
try {
trainingSet = new Data("playtennis");
System.out.println(trainingSet); //exception...at data.Data.main(Data.java:207)
} catch (EmptyDatasetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}