PDA

View Full Version : Strano problema nel "contare" (html/servlet)


mauc
01-03-2012, 15:59
Un buon pomeriggio a tutto il forum.

Vi spiego subito il mio problema.

Ho un foglio excel con un'intestazione e dei valori nella tabelle. I valori sono 5, che si ripetono riga per riga. Il foglio excel l'ho trasformato in una tabella html e nell'intestazione sono andato a creare una checkbox

<input type=\"checkbox\" name=\"intestazione\" value='"+k+"' checked=\"yes\" >

con k inizializzato a zero. Lo uso per capire nella servlet successiva quali sono le colonne selezionate.

Una volta selezionate un determinato numero di colonne vado nella successiva servlet, attraverso un form per analizzare i dati all'interno delle colonne selezionate e non.
Facendo in questo modo


String check[] = request.getParameterValues("intestazione"); // qui trovo le colonne selezionate

try {
String cartella="C://Documents and Settings//user//Documenti//NetBeansProjects//prog//build//web//";
String filePath = cartella + nome;
FileInputStream fs = new FileInputStream(new File(filePath));
WorkbookSettings ws = null;
Workbook workbook = null;
Sheet s = null;
Cell rowData[] = null;
double rowCount = 0.0;
int columnCount = 0;
int totalSheets = 0;
ws = new WorkbookSettings();
workbook = Workbook.getWorkbook(fs, ws);
totalSheets = workbook.getNumberOfSheets();
s = workbook.getSheet(0);
columnCount=s.getColumns();
rowCount = s.getRows();

for (int i = 1; i < rowCount; i++) {
rowData = s.getRow(i);
if (rowData.length > 1) {
int p=0;
for (int j = 0; j < columnCount; j++) {
p++;
for (int l=0; l<check.length;l++){
if(Integer.parseInt(check[l]) == p){ // Vuol dire che ho una cella della Colonna selezionata
D.Conta(rowData[j].getContents());
}
else //ho una colonna non selezionata
H.Conta(rowData[j].getContents());
}
}
}

out.println("hAA "+ H.getA() );
out.println("hCC "+ H.getC() );
out.println("hGG "+ H.getG() );
out.println("hTT "+ H.getT() );
out.println("hCT "+ H.getCT() ); out.println("<br>");out.println("<br>");

out.println(" dAA "+ D.getA() );
out.println(" dCC "+ D.getC() );
out.println(" dGG "+ D.getG() );
out.println(" dTT "+ D.getT() );
out.println(" dCT "+ D.getCT() ); out.println("<br>");out.println("<br>");

H.Pulizia();D.Pulizia();
}



} finally {
out.close();
}


Ad occhio mi sembrava giusta, ma quando vado a vedere l'out.println a video i valori del primo if

if(Integer.parseInt(check[l]) == p)

sono giusti.
Quelli del 2nd if sono completamenti sballati.

Ho fatto una prova con una tabella con 50colonne e ho selezionato 2 colonne. I valori delle 2 colonne sono giusti, quelle delle colonne non selezionate sono sbagliati.
Dove sbaglio?!

Noto che se seleziono pił colonne, l'errore incrementa.

mauc
02-03-2012, 08:24
if(Integer.parseInt(check[l]) != p && rowData[j] != null){ // Vuol dire che ho una cella della Colonna selezionata
D.Conta(rowData[j].getContents());
}se faccio cosi, i valori che mi restituiscono i contatori, sono sbagliatissimi