Kann einen Array nicht füllen, im Nachhinein nur "null"-Werte

maxxas

Mitglied
Hallo Leute! Ich habe ein Problem. Ich schreibe an einem kleinen Programm. Es soll zunächst Werte aus einem Excel-Sheet in ein String Array packen. Ich habe alles ausprobiert, denke, dass das wahrscheinlich mit den Lebenszyklen der Variablen zusammenhängt, finde aber trotzdem keine Lösung. Unten folgt der Quellcode. Ich danke im Voraus für jede wirkliche Hilfe! P. S. Ich nutze JDeveloper12, weiß nicht, ob es wichtig ist.

Java:
    public void read() throws IOException  {
//String inputVerzStr = path to .xls-file
        File inputWorkbook = new File(inputVerzStr);
        Workbook w;
        
        try {
          w = Workbook.getWorkbook(inputWorkbook);
          // Get the first sheet
          Sheet sheet = w.getSheet(0);
          // Loop x columns and lines

          for (int j = 0; j < sheet.getColumns(); j++) {
    
            for (int i = 0; i < sheet.getRows(); i++) { 
              String value = "";
              int rows = sheet.getRows();  
              initializeArray(rows);
              Cell cell = sheet.getCell(j, i);
           // CellType type = cell.getType();
                if (j == 0) {
                    System.out.println("I got a label "
                        + cell.getContents());
                    value = cell.getContents();
                    sheetValues[i][j][j][j][j][j] = value;
                    System.out.println(sheetValues[i][j][j][j][j][j]);
                    if(i>0){
                    System.out.println(sheetValues[i-1][j][j][j][j][j]);
                    }
    //                    fillArrayAccount(i);
              }

                if (j == 1) {
                    System.out.println("I got a label "
                        + cell.getContents());
                      sheetValues[j][i][j][j][j][j] = value;
                  }
                
                if (j == 2) {
                    System.out.println("I got a label "
                        + cell.getContents());
                    sheetValues[j][j][i][j][j][j] = value;
                }

                if (j == 3) {
                    System.out.println("I got a label "
                        + cell.getContents());
                    sheetValues[j][j][j][i][j][j] = value;
                }

            }
          }
        } catch (BiffException e) {
          e.printStackTrace();
        }  
      }
[code=Java]
 

maxxas

Mitglied
oh, sorry, ich hoffe, jetzt wird die Darstellung besser. Das Array sheetValues[][][][][][] habe ich auch schon statisch gemacht - das bracht nix:

Java:
 public void read() throws IOException {
//String inputVerzStr = path to .xls-file
File inputWorkbook = new File(inputVerzStr);
Workbook w;

try {
w = Workbook.getWorkbook(inputWorkbook);
// Get the first sheet
Sheet sheet = w.getSheet(0);
// Loop x columns and lines

for (int j = 0; j < sheet.getColumns(); j++) {

for (int i = 0; i < sheet.getRows(); i++) { 
String value = "";
int rows = sheet.getRows(); 
initializeArray(rows);
Cell cell = sheet.getCell(j, i);
// CellType type = cell.getType();
if (j == 0) {
System.out.println("I got a label "
+ cell.getContents());
value = cell.getContents();
sheetValues[i][j][j][j][j][j] = value;
System.out.println(sheetValues[i][j][j][j][j][j]);

// Das hier ist ein Test, um rauszufinden, ob das Array-Element, das vorher gespeichert werden sollte, immer noch exisitert. Leider gibt es nur "null" zurück!
if(i>0){
System.out.println(sheetValues[i-1][j][j][j][j][j]);
}
}

if (j == 1) {
System.out.println("I got a label "
+ cell.getContents());
sheetValues[j][i][j][j][j][j] = value;
}

if (j == 2) {
System.out.println("I got a label "
+ cell.getContents());
sheetValues[j][j][i][j][j][j] = value;
}

if (j == 3) {
System.out.println("I got a label "
+ cell.getContents());
sheetValues[j][j][j][i][j][j] = value;
}

}
}
} catch (BiffException e) {
e.printStackTrace();
} 
}
 
T

tummo

Gast
2 Anmerkungen, falls du wirklich Hilfe erwartest:

  • Poste ein lesbares (!), möglichst vollständiges Minimalbeispiel, bzw. ein Fragment welches den Fehler illustriert. Nur die wenigsten hier haben Lust, solche unleserlichen Codefragmente erst selbst zu formatieren und zum Laufen zu bringen bzw. sich die relevanten Codestellen rauszusuchen.
  • "Ich habe ein Problem" ist keine Fehlerbeschreibung. Das versteht sich von selbst. Ratespielchen, die Fehlerbeschreibung am Ende eines Inline-Kommentars zu verstecken, für den man erst scrollen muss, kommen auch nicht so gut.
 
Zuletzt bearbeitet von einem Moderator:

maxxas

Mitglied
Gut. Das Problem habe ich zwar beim 1. Post beschrieben, aber ich gehe jetzt genauer drauf ein...

Was das Programm tun soll:
Es soll Werte (Strings) in ein String-Array füllen. Die Werte kommen aus einer xls.-Datei, deshalb nutze ich ein mehrdimensionales Array (eine Spalte in der xls-Tabelle = 1 Dimension im Array). Die Werte des Array werden beim "befüllen" auch jedes Mal ausgegeben.

Testweise habe ich im if-Block (innerhalb der for-Schleife), der die 1. Dimension des Arrays befüllt (also 1. Spalte der Tabelle in die 1. Dimension des Arrays füllt) eine Ausgabe eingebaut, die das Element des Arrays ausgeben soll, das im vorherigen Iterationsschritt dort unter einem anderen Index eingesetzt wurde. Hier erhalte ich stets "Null"-Werte. Die Werte werden also nicht gespeichert oder das Array wird jedes Mal überschrieben.

Kann mir jemand den Fehler hier aufzeigen:

Java:
 public void read() throws IOException {

//String inputVerzStr = path to .xls-file
File inputWorkbook = new File(inputVerzStr);
Workbook w;

try {
w = Workbook.getWorkbook(inputWorkbook);

// Get the first sheet
Sheet sheet = w.getSheet(0);

// Loop x columns and lines
for (int j = 0; j < sheet.getColumns(); j++) {
for (int i = 0; i < sheet.getRows(); i++) { 

String value = "";
int rows = sheet.getRows();

//Hier wird anhand der Zeilenanzahl in der .xls-Tabelle die Länge des Arrays festgelegt
initializeArray(rows);

//eine Zelle aus der .xls-Tabelle rausgepickt...
Cell cell = sheet.getCell(j, i);

//Hier geht es zum Befüllen des Arrays
//1. Spalte = 0. Array-Dimension
if (j == 0) {
System.out.println("I got a label "
+ cell.getContents());

//Der Inhalt einer Zelle wird in eine String-Variable eingefügt
value = cell.getContents();

//der String in das Array geschrieben
sheetValues[i][j][j][j][j][j] = value;

//Ausgabe zum Testen ... der Wert aus der akt. Iteration
System.out.println(sheetValues[i][j][j][j][j][j]);

//... und hier soll der Wert aus der vorherigen Iteration ausgegeben werden. Es kommt aber nur eine "Null"-Ausgabe :(((
if(i>0){
System.out.println(sheetValues[i-1][j][j][j][j][j]);
}
}

//2. Spalte = 1. Array-Dimension
if (j == 1) {
System.out.println("I got a label "
+ cell.getContents());
sheetValues[j][i][j][j][j][j] = value;
}

//3. Spalte = 2. Array-Dimension
if (j == 2) {
System.out.println("I got a label "
+ cell.getContents());
sheetValues[j][j][i][j][j][j] = value;
}

//4. Spalte = 3. Array-Dimension
if (j == 3) {
System.out.println("I got a label "
+ cell.getContents());
sheetValues[j][j][j][i][j][j] = value;
}

}
}
} catch (BiffException e) {
e.printStackTrace();
} 
}

... kürzer geht es nicht, weil es sonst keinen Sinn ergibt. Außerdem habe ich bei anderen Foren schon oft gesehen, dass um Quellcode gebeten wird. Ich habe ihn so vollständig wie nur möglich kommentiert. Danke im Voraus!!!
 

JUserToto

Aktives Mitglied
Ich habe immernoch keine Ahnung, was da nun genau passieren soll (ohne Einrückungen ist das auch echt schwer zu lesen)...
Ich hab das jetzt so verstanden, dass du eine Datei hast in der eine Tabelle abgelegt ist. (Ich nehme mal nur 4 Spalten)
Z.B. sowas:

Code:
Wert1	Wert2	Wert3	Wert4

Wert5	Wert6	Wert7	Wert8

Wert9	Wert10	Wert11	Wert12

Du iterierst nun über alle Zeilen und Spalten der Tabelle.
Nehmen wir an du bist in der 1. Spalte und 1. Zeile. (i = 0, j = 0).
Dann schreibst du den Wert in das Array sheetValues[0][0][0][0].
In der nächsten Zeile schreibst du den Wert an die Stelle sheetValues[1][0][0][0]... dann
in sheetValues[2][0][0][0]. Was macht das für einen Sinn? Eine Tabelle ist doch zweidimensional..
es würde doch also reichen den Wert an die Stelle sheetValues[j] zu schreiben...

lg Toto
 
Zuletzt bearbeitet:

maxxas

Mitglied
Hi Toto, ich rücke nächstes Mal per Hand ein (mein Versehen; aber mit der Tabulator-Taste ging es irgendwie nicht)

Du hast es leider nicht ganz verstanden.

Ausgangslage:
Eine .xls-Tabelle mit 4 Spalten voller Daten:
1. Spalte Kontonummern
2. Bankleitzahlen
3. Banknamen
4. Kontobesitzer

Diese Excel-Tabelle möchte ich in ein Array überführen. Der Einfahheithalber - es hat 4 Dimensionen (sheetValues[][][][]): Für jede Spalte in der Tabelle gibt es eine Dimension.


Problem: Die Werte werden beim Befüllen des Arrays (mit Hilfe der For-Schleife) korrekt ausgelesen und scheinbar ins Array kopiert, bleiben dort aber nicht gespeichert(?). Das heißt, wenn ich am Ende die Werte aus dem Array ausgeben will, kommen nur "Null"-Werte.

Ich hoffe, es war jetzt einleuchtender...
 

JUserToto

Aktives Mitglied
Der Einfahheithalber - es hat 4 Dimensionen (sheetValues[][][][]): Für jede Spalte in der Tabelle gibt es eine Dimension.

Warum ist das einfach? Mit zwei Dimensionen values[zeile][spalte] könntest du direkt auf einen speziellen Wert zugreifen. Du hast einfach 4 Dimensionen zu viel. Folglich wird dein Problem eher beim Auslesen der Daten liegen als beim Befüllen des Arrays.
 
T

tummo

Gast
Wie die Vorredner schon schrieben: Korrigier erst mal dieses komische Vorgehen, eine Tabelle (also eine 2-dimensionale Struktur) mit aller Gewalt in ein 6-dimensionales Array zu zwängen. Dann verschwindet der Fehler mit hoher Wahrscheinlichkeit schon von alleine. Wie man dem Quelltext und deinen Ausführungen ansieht, hast du komplett den Überblick verloren, was du überhaupt noch wo schreibst und liest (z.B. erzählst du von 4-dimensionalen Arrays, implementierst aber 6-dimensionale, und der Zugriff darauf ist absolut nicht nachvollziehbar). Es ergibt schlichtweg keinen Sinn, auf alle Elemente der 2. Spalte mittels
Code:
sheetValues[2][2][2][i][2][2] = value;
statt
Code:
sheetValues[i][2] = value;
zuzugreifen. Unterm Strich kann man wahrscheinlich den ganzen komplizierten Code wiefolgt eindampfen:
Code:
for (int j = 0; j < sheet.getColumns(); j++) {
   for (int i = 0; i < sheet.getRows(); i++) { 
      sheetValues[i][j] = sheet.getCell(j, i).getContents();
   }
}
 
Zuletzt bearbeitet von einem Moderator:

maxxas

Mitglied
:toll:

es gab da noch paar Fehler aber die habe ich dann selber gefunden. Es funzt!

Vielen Dank an dieser Stelle nochmal (lustig, wie man blind für eigene Fehler ist)
 

turtle

Top Contributor
Schön das es klappt:toll:

Und auch ich nehme etwas mit
Java:
sheetValues[j][j][i][j][j][j] = value;
Heiliges Blechle:applaus:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
C In einer Methode einen Array zurückgeben Java Basics - Anfänger-Themen 2
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
G Erste Schritte Einen Array absuchen und Buchstaben zählen Java Basics - Anfänger-Themen 17
M Kumulieren von Elementen in einen Array Java Basics - Anfänger-Themen 8
S Einen Eintrag im Array löschen? Java Basics - Anfänger-Themen 11
R Array: Mehrere Indizes für einen Wert ausgeben? Java Basics - Anfänger-Themen 4
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
S Einen neuen String ohne Array oder List erzeugen??? Java Basics - Anfänger-Themen 13
T Array in einen Baum zu überführen Java Basics - Anfänger-Themen 3
B Datentypen Werte in einen Array einlesen und danach die beiden höchsten Werte wieder ausgeben Java Basics - Anfänger-Themen 3
C ein [n] [n] array erstellen und einen wert zuordenen Java Basics - Anfänger-Themen 7
C OOP Aus Vektor zufällig einen Eintrag wählen und in Array[][] schreiben Java Basics - Anfänger-Themen 5
N in int array einen pattern(eine zahl) finden Java Basics - Anfänger-Themen 21
B Datentypen Char Array in einen String verwandeln? Java Basics - Anfänger-Themen 2
G Überprüfen ob einen Array einen Value enthält Java Basics - Anfänger-Themen 13
G Aus Array einen Heap erstellen Java Basics - Anfänger-Themen 5
halla Character-Array in einen String umwandeln Java Basics - Anfänger-Themen 3
I einen text von tastatur in array einlesen und auch ausgeben Java Basics - Anfänger-Themen 1
B Einen Array aus vielen Vectoren Java Basics - Anfänger-Themen 3
G Elemente in einem String-Array in einen String umwandeln Java Basics - Anfänger-Themen 2
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
P Gibt es einen anderen Weg um "{}" in IntelliJ zu schreiben? Java Basics - Anfänger-Themen 5
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
N Gibt es hierfür einen Shortcut Java Basics - Anfänger-Themen 5
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
Poppigescorn Mithilfe einer Arrayliste einen Notenspiegel ausgeben Java Basics - Anfänger-Themen 12
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
Devin Wo kann man einen Java Lehrplan finden? Java Basics - Anfänger-Themen 5
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
S First Time Mave: Wie ergänze ich einen Source-Folder? Java Basics - Anfänger-Themen 10
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
F Hilfe für einen Anfänger! Java Basics - Anfänger-Themen 4
N Wie kann ich einen String wieder zusammensetzen und ausgeben lassen? Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
T Einen Stern malen Java Basics - Anfänger-Themen 32
T Einen Stern malen Java Basics - Anfänger-Themen 2
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Mit for Schleife einen String Rückwärts befüllen Java Basics - Anfänger-Themen 9
J Einen Buttonklick in Label anzeigen Java Basics - Anfänger-Themen 6
S Gibt es einen guten kostenlosen Online-kurs Java Basics - Anfänger-Themen 2
W Wie programmiere ich einen Potenzrechner? Java Basics - Anfänger-Themen 5
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5
B Wie instanzisiert man einen Cursor richtig? Java Basics - Anfänger-Themen 3
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
C Wie kann ich einen User Input mit einer If-Anweisung verbinden? Java Basics - Anfänger-Themen 5
J Guten tag, Ich hoffe ihr habt einen schönen Sonntag und könnt mir helfen Java Basics - Anfänger-Themen 2
D Methoden 2 TextWatcher auf einen EditText Java Basics - Anfänger-Themen 4
I Datentypen input.nextCharAt(0) wirft einen Fehler Java Basics - Anfänger-Themen 3
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
Bluedaishi Einen Betrag X auf X Tage verteilen Java Basics - Anfänger-Themen 14
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
J In Java einen Ton erzeugen Java Basics - Anfänger-Themen 8
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
V Arrays die einen Termin speichen Java Basics - Anfänger-Themen 5
G Wie gebe ich einen Dateipfad in RandomAccessFile an? Java Basics - Anfänger-Themen 2
R Wie kann ich einen Objekt zu Instanzvariable speichern ? Java Basics - Anfänger-Themen 10
F In LinkedList einen Wert ersetzen oder neu einfügen Java Basics - Anfänger-Themen 7
S Das Anführungszeichen(") Zeichen in einen String setzen Java Basics - Anfänger-Themen 1
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
J Erste Schritte Wie kann ich einen String in eine If einbauen :)? Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben