Abbruchbedingung

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo zusammen,
ich bringe keine vernünftige Abbruchbedingung beim Lesen eines Exceldokumentes
zustande.
Wenn ich es so mache wie unten angegeben, kommt eine NullPointerException bei
row.getCell(), weil das Exceldokument vielleicht keine Zellen mehr hat.
while(row getCell() != null) hat auch keinen Wert.
Hat vielleicht jemand eine Idee?



Code:
int i=2
HSSFRow row = sheet.getRow((short)i);
HSSFCell cell = row.getCell((short)34);
String string =cell.getStringCellValue();
		while(!(string.equals(""))){
                       i++;					          	
                       row = sheet.getRow((short)i);
	                    cell = row.getCell((short)34);
	                    string=cell.getStringCellValue();
		}

Danke im Voraus.
 

AlArenal

Top Contributor
Ist dir schonmal die Idee gekommen, dass am Ende des Sheets auch keine Row mehr vorhanden ist? Damit wird row null und ein row#getCell liefert verständlicherweise ne NPE. Vielleicht postest du mal besser den Stacktrace der Exception (immer ne gute Idee, wenn man egen einer Exception fragt ;) ).
 
G

Gast

Gast
Schon klar, dass am Ende des Blattes auch eine Exception kommt,
nur sind die Dateien alle maximal 30000 Zeilen groß.


Exception:
Code:
Exception in thread "Thread-2" java.lang.NullPointerException
	at Headerschreiben.start(Headerschreiben.java:113)
	at Header$8.run(Header.java:271)
	at java.lang.Thread.run(Unknown Source)

Nun, wie gesagt kommt die Exception, wenn keine Zerile mehr da ist(nicht das Ende com Excelblatt).
 
G

Gast

Gast
Also, oben war nur beispielhaft, da Orginalcode schlampig geschrieben ist, aber bitte:
Code:
      while(!(kjh.equals(""))){		
			cell = row.getCell((short)34);             //Zeile 113
			hgf=cell.getStringCellValue();
			System.out.println(hgf);
			if(hgf.equals(kjh)){	
				iii++;
			}else{
			kjh=hgf;
			koml[ii]=kjh;
			ii++;
			iii++;
			}
			row = sheet.getRow((short)iii);		  
	}
 

Bert Brenner

Bekanntes Mitglied
Tja, dann ist row==null, also pack das in deine Abbruchbedingung rein und gut is.

Da war die vermutung von Al schon richtig.


Ups, da war jemand schneller :)
 
G

Gast

Gast
OK Danke, dachte immer getCell() liefert null, mit:
Code:
 while(!(kjh.equals(""))||!(row==null))
bricht es ab.
Danke.
 

Leroy42

Top Contributor
Tja, mit seinem deMorgan unterm Arm wäre das nicht passiert :cool:

Code:
!(kjh.equals("")) || !(row==null)

<==>

kjh.equals("") && row==null

Das verursacht doch schon beim Schreiben Magengrummeln!
 

Leroy42

Top Contributor
AlArenal hat gesagt.:
Boolesche Algebra ist nicht jedermanns Sache. ;)

Hmmh! ???:L

Warst nicht du selbst es, der vor einiger Zeit jemandem, der sich mit den
einfachsten Grundlagen der Trigonometrie (Pythagoras) nicht auskennt, die
Qualifikation zum Programmierer zumindest angezweifelt hast? :bae:
 

AlArenal

Top Contributor
Ja und das meinte ich auch ernst. Obige AUssage ist aber, an dem Smiley kann mans erkennen, nicht ganz so furchtbar ernst gemeint ;)
 

AlArenal

Top Contributor
Ja, der "Ich bin seit einer Woche in der Ausbildung, schreibt mir mein Programm"-Mensch ist auch nocht nicht wieder zurück :p
 
G

Gast

Gast
Habe den Vorschlag statt || doch mal && zu nehmen von AlArenal auch nicht ernst genommen, da ich gedacht habe, dass er sicher beim Frühschoppen(ich hoffe jeder kennt den Begriff) sitzt und vielleicht über den Durst getrunken hat.
Anders konnte ich mir den Ausschweifer bei den sonst sehr kompetenten Antworten nicht erklären.
 

Leroy42

Top Contributor
:shock:

Ich vermute mal, Gast hat
AlArenal hat gesagt.:
Boolesche Algebra ist nicht jedermanns Sache. ;)
derart interpretiert, daß du deine (Nicht-)Umformung wieder verworfen hast. :shock: :autsch:

Liegt zum Teil aber auch an mir. Ich hätte statt

Code:
!(kjh.equals("")) || !(row==null)
<==>
kjh.equals("") && row==null

genauer schreiben sollen
Code:
!(kjh.equals("")) || !(row==null)
entspricht einer Schleifen-Abbruchbedingung von
kjh.equals("") && row==null

Ich wollte darauf hinweisen, daß Gast's Schleife nur dann beendet
wird wenn beide Bedingungen zutreffen, was ja keinen Sinn machte.

So wie ich es geschrieben habe, steht da natürlich Quatsch. :oops:

:meld: Durch solche Mißverständnisse entstehen Kriege! :meld:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben