2d Array läuft nicht rund.

DefconDev

Bekanntes Mitglied
Hallo zusammen,

zurzeit sitze vor meiner "klasse" und sehe den gemachten Fehler von mir nicht, eigentlich sollte er trivial sein aber für mich im Augenblick nicht zu entdecken.

innerhalb meines Konstruktors übergebe ich mehrere Werte, die von eine .ods Datei eingelesen werden.

Grundsätzlich ist das nicht entscheidend für den Fehler.
Java:
public Spieler einlesenWerte(File f, int spalte,int zeile) throws IOException{
			Sheet sheet = SpreadSheet.createFromFile(f).getSheet(0);
			
			String name_Spieler = sheet.getCellAt(spalte, zeile).getTextValue(); // Anzahl der Spalten & Anzahl der Zeilen
			double punkteRating_Spieler= Double.parseDouble(sheet.getCellAt(spalte+1, zeile).getTextValue());
			String punkteRating_Map[][]= new String[zeileMap][spalteMap];
			
			spalte= spalte+6;
			zeile= zeile-1;

			for(int i=0;i<1;i++)
			{
				System.out.println(punkteRating_Map.length);
				
				for(int j=0;j<35;j++)
				{
					punkteRating_Map[i][j]= sheet.getCellAt(spalte+j, zeile).getTextValue();
					
					System.out.println("Zeile"+j+": "+punkteRating_Map[i][j]);
				}
				zeile++;
			}
			return new Spieler(name_Spieler, punkteRating_Spieler, punkteRating_Map);
			
		
		
	}

Eigentlich geht es nur um das 2d-Array welches Daten einliest aber aus irgendwelchen Gründen statt nur zwei Zeilen bis zur 35. Spalte speichert, sogar 3 Zeilen bis zur 35. Spalte einliest.

Eines vorweg , die Magic Numbers habe ich für mich eingebaut um heraus zufinden wo das Problem liegt, liest sich für mich leichter als wenn ich etliche Variable da eintrage.

Meine Umsetzung sollte eigentlich nur 2 Zeilen mit jeweils 35 Spalten einlesen.
 
Zuletzt bearbeitet:
Java:
int zeileMap=1; 
int spalteMap=35;
String punkteRating_Map[][]= new String[zeileMap][spalteMap];

Hatte ich vergessen.
 
Zuletzt bearbeitet:
Moin,

habe jetzt Dein Problem nicht wirklich verstanden, aber Dir ist schon klar, dass diese Schleife
Java:
for(int i=0;i<1;i++)
völlig sinnlos ist, da der Body eh' nur genau einmal durchlaufen wird ???:L

Gruß
Klaus
 
Das ist mir durchaus bewusst.

Irgend ein Denkfehler meinerseits liegt vor, ehrlich gesagt benutze ich 2d array sehr selten.

Java:
     for(int i=0;i<35;i++)
{
     System.out.println(punkteRating_Map[0][i]);
}
Wenn ich das mache, zeigt er mir nicht 35 Felder an, sondern das dreifache.


Mein Gedanke war eigentlich der:

Die daten die eingelesen werden, befinden sich in einer Tabelle.
Die erste Zeile, a 35 Spalten soll in [0][0-34] gespeichert werden.
Die zweite Zeile, a35 Spalten soll in [1][0-34] gespeichert werden.

daher habe ich ein array [2][35] angelegt.


aber wie du sehen kannst, selbst wenn das nur einmal durchläuft, speichert der in [0][35] mehr als 90 Felder. Und ich verstehe gerade gar nicht warum? Spätestens bei 35 müsste der doch array gesprengt haben.
 
Also, wenn du vielleicht mal Test-Eingabewerte und die Ausgabe posten würdest, wäre das super.
Bei der Zeile:

Java:
System.out.println("Zeile"+j+": "+punkteRating_Map[i][j]);

Willst du doch bestimmt ein i schreiben, statt dem j oder? Oder sowas wie "Zeile" + i + " Spalte" + "j" + ...

Die For-Schleife, die nur einmal läuft ist mir auch nicht klar, aber vllt. willst du die ja später erweitern.

Wie ist das damit?
Java:
punkteRating_Map[i][j]= sheet.getCellAt(spalte+j, zeile).getTextValue();

Wird bei sheet.getCellAt() wirklich zuerst die Spalte angegeben und dann die Zeile? Weiß gerade selber nicht so recht, wenn man mal wie gesagt eine Eingabe+Ausgabe sieht, wäre eher verständlich worum es geh.

PS: Mit Debugger müsste sich der Fehler doch eigntl. recht schnell finden lassen.
 
Zuletzt bearbeitet:


so sieht meine Tabelle aus , geht jetzt nur bis spalte 25. Aber im Programm geht er bis zur spalte 35.

Java:
Zeile0: Arabien
Zeile1: Archipel
Zeile2: Arena
Zeile3: Dunkler Wald
Zeile4: Festung
Zeile5: Flüsse
Zeile6: Geistersee
Zeile7: Goldrausch
Zeile8: Hochland
Zeile9: Inseln
Zeile10: Kontinent
Zeile11: Kratersee
Zeile12: Küste
Zeile13: Mittelmeer
Zeile14: Mongolei
Zeile15: Nomade
Zeile16: Oase
Zeile17: Ostsee
Zeile18: Salzsumpf
Zeile19: Skandinavien
Zeile20: Team-Inseln
Zeile21: Völkerwanderung
Zeile22: Yucatan
Zeile23: Akropolis
Zeile24: Budapest
Zeile25: Cenotes
Zeile26: Golden Pit
Zeile27: Hideout
Zeile28: Hill Fort
Zeile29: Land of Lakes
Zeile30: Lombardia
Zeile31: MegaRandom Beta
Zeile32: Steppe
Zeile33: Team Arena
Zeile34: Valley


Zeile0: 20
Zeile1: 0
Zeile2: 0
Zeile3: 0
Zeile4: 0
Zeile5: 0
Zeile6: 0
Zeile7: 0
Zeile8: 0
Zeile9: 0
Zeile10: 0
Zeile11: 0
Zeile12: 0
Zeile13: 0
Zeile14: 0
Zeile15: 0
Zeile16: 0
Zeile17: 0
Zeile18: 0
Zeile19: 0
Zeile20: 0
Zeile21: 0
Zeile22: 0
Zeile23: 0
Zeile24: 0
Zeile25: 0
Zeile26: 0
Zeile27: 0
Zeile28: 0
Zeile29: 0
Zeile30: 0
Zeile31: 0
Zeile32: 0
Zeile33: hhhhh
Zeile34: 20

//Bis hierhin, macht die Schleife alles richtig, alles was danach kommt, es aus der 3. Zeile.

Zeile0: 50
Zeile1: 0
Zeile2: 0
Zeile3: 0
Zeile4: 0
Zeile5: 0
Zeile6: 0
Zeile7: 0
Zeile8: 0
Zeile9: 0
Zeile10: 0
Zeile11: 0
Zeile12: 0
Zeile13: 0
Zeile14: 0
Zeile15: 0
Zeile16: 0
Zeile17: 0
Zeile18: 0
Zeile19: 0
Zeile20: 0
Zeile21: 0
Zeile22: 0
Zeile23: 0
Zeile24: 0
Zeile25: 0
Zeile26: 0
Zeile27: 0
Zeile28: 0
Zeile29: 0
Zeile30: 0
Zeile31: 0
Zeile32: 0
Zeile33: 0
Zeile34: 0


das gelb unterstrichene ist das was eigentlich nicht eingelesen werden soll, aber trotzdem wird.



Ich habe die for Schleife nur aus Testzwecken einmal durchlaufen lassen. Trotzdem verstehe ich nicht wie es überhaupt zu so vielen Einträgen kommt.

Nach meinem Verständnis müsste das Array doch nach 35 Einträgen voll sein. stattdessen werden 3mal soviele erzeugt.
Java:
punkteRating_Map[i][j]= sheet.getCellAt(spalte+j, zeile).getTextValue();

Das gehört zum jopendokument paket und als erstes werden wirklich die spalten eingelesen und dann die zeilen.
 
Zuletzt bearbeitet:
So habe das Problem beheben können. Nämlich ist das ganze Teil eines Konstruktors und in der Main, habe ich drei Objekte die dem Konstruktor dieser Klasse Werte übergeben. Dadurch enstehen diese neuen arrays.

Also eine absolute Dummheit von mir.
 
Zuletzt bearbeitet:

Zurück
Oben