Zeilen/Spaltenzahl

CEric

Aktives Mitglied
Hi!
Ich will die Spaltenzahl meines mehrdim. array String[][]tabelle; bekommen.
Mein Code:
Java:
public int getColumns() {
		
		int spalten = tabelle[0].length;

		for(int y = 0; y < tabelle[0].length; y++){
			for(int x = 0; x < tabelle.length; x++){
				if(tabelle[x][y] == ""){
					spalten = spalten - 1;
					return spalten;
					}
				else if(tabelle[x][y] != ""){
					return spalten;
				}
			}
		}
		return spalten;

	}
Enthält eine Spalte den leeren String "", dann gilt sie als nicht benutz und werden nicht mitgezählt!
Problem das ich jetzt habe ist, dass ich bei jedem Schleifendurchlauch für jede Zeile x, wo ein leerer String auftritt die Spaltenzahl reduziere, obwohl ich ja noch in der gleichen Spalte y bin!
Wie kann ich das verhindern?
 
N

nillehammer

Gast
Hab den Code nicht bis ins letzte nachvollzogen, aber die return-Statements in der Schleife sind sicher nicht richtig. Außerdem werden String-Vergleiche mit equals() gemacht!!!!!
 
Zuletzt bearbeitet von einem Moderator:

CEric

Aktives Mitglied
Ok dann mit tabelle[x][y].equals(""), oder!
Nunja, ich hab das Array das ne Tabelle darstellen soll in dem Strings gespeichert sind, zB Namen!
Das ganze eben mit Zeilen x und Spalten y, jetzt soll ich die verwendeten Spalten ausgeben, enthält die Spalte einen leeren String, ist sie nicht verwendet und wird abgezogen!
Bei meinem code rduziere ich aber jetzt immer spalten - 1;
wenn ich jetzt aber in Spalte 1 bin und Zeile 1 und dort ist ein leerer String, dann is das ja richtig!
hüpfe ich aber zu Zeile 2 in spalte 1 und da is auch ein leerer String, dann mach ich ja wieder spalten - 1; was dann ja falsch ist!

kann das sein?
Java:
int y = 0;
			for(int x = 0; x < tabelle.length; x++){
				if(tabelle[x][y].equals("")){
					spalten = spalten - 1;
					y++;
					return spalten;
					}
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Sorry für mein Schreien. Ich hab die Schriftgröße inzwischen verkleinert. Aber ich hab diesen Satz in letzter Zeit zu oft geschrieben. Nicht deine Schuld.

Zerlege Dein Gesamtproblem am besten in Teilprobleme, welche Du in einzelnen Methoden abhandelst und benutze sprechende Namen (ok, kann sein, dass x und y für Dich sprechend sind. Ich finde zeile/spalte sprechender). Dann fällt es Dir leichter, die Lösung zu finden. Etwa so:
Java:
public class SpaltenZaehler {

   private static final String NOT_USED = "";

  /**
    * Nimmt einen zweidimensionalen Array, der eine Tabelle darstellt, entgegen. In der ersten
    * Dimension stehen die Zeilen, in der zweiten die Spalten. Dieser Array wird zeilenweise
    * durchgegangen und in jeder Spalte geschaut, ob dord ein leerer String oder null drinnen steht.
    * Dann gilt die Spalte als nicht genutzt. Die Summe der genutzen Spalten wird für jede Zeile
    * in einem int-Array zusammengefasst ausgegeben.
    */
  public int[] genutzteSpaltenProTabelle(Object[][] table) {
    int[] result = new int[table.length];

    for (int zeile = 0; zeile < table.length; zeile++) {
      result[zeile] = genutzteSpaltenProZeile(table[zeile]);
    }
    return result;
  }

  int genutzteSpaltenProZeile(final Object[] zeile) {
     // Im Idealfall sind alle Spalten genutzt, dann ist das Ergebnis die Länge des zeilen-Arrays
     int result = zeile.length;
     for (Object spalte: zeile ) {
        if(!used(spalte) {
          result--;
        }
     }
     return result;
  }

  boolean used(Object obj) {
    return obj != null && !obj.equals(NOT_USED);
  }
}

Erstens liest sich so ein Code viel besser als eine dreifach verschachtelte Schleife/If-Verzweigung. Und Du kannst so auch die Methoden einzeln aufrufen und testen, um evtl. vorhandene Fehler im Algorithmus zu finden.
 
Zuletzt bearbeitet von einem Moderator:

ARadauer

Top Contributor
Ich würd auf null überprüfen...

Aber mal ein sehr grundlegender Tipp: Überleg dir wie du es per Hand machen würdest!

Was willst du genau machen? Wenn du eine zeile hast und drei Spalten und in Spalte 1 steht was und 3 auch nur 2 nicht. Wie viele Spalten hast du? 2? Ich denke trotzdem 3 oder?
Was ist wenn in der zweiten Zeile ganz was anderes steht? Überleg dir was du machen willst und dann wie du es selber machen würdest... und dann wie der Computer es machen würde..

also ich würde einfach von rechts rüber gehen und schauen bis einer leer ist... das ist dann die spaltenbreite... natürlich musst du die anderen zeilen auch berücksichtigen und die größte suchen...

zb so...

Java:
public class Test {

    String[][] data = new String[10][10];

    public void setValue(int row, int col, String value) {
        data[row][col] = value;
    }

    public String getValue(int row, int col) {
        return data[row][col];
    }

    public void printTable() {
        for (int i = 0; i < data.length; i++) {
            for (int y = 0; y < data[i].length; y++) {
                if (data[i][y] == null) {
                    System.out.print(" |");
                }
                else {
                    System.out.print(data[i][y] + "|");
                }
            }
            System.out.println("");
        }
    }

    public int getColumns() {
        int max = 0;
        for (int i = 0; i < data.length; i++) {
            for (int y = data[i].length - 1; y >= 0; y--) {
                if (data[i][y] != null) {
                    if (y + 1 > max) {
                        max = y + 1;
                    }
                    continue;
                }
            }
        }

        return max;

    }

    public static void main(String[] args) {
        Test test = new Test();
        test.setValue(2, 2, "X");
        test.setValue(0, 0, "X");
        test.setValue(8, 4, "O");
        test.printTable();
        System.out.println("Belegte Spalten " + test.getColumns());
    }

}
 

CEric

Aktives Mitglied
@ARadauer:
Hm ja du hast recht, ich muss also einfach vorerst für die letzte Zeile Prüfen ob in einer Spalte ein nicht leerer String ist, falls das aber in allen Spalten der letzten Zeile der Fall ist muss ich das ganze mit der vorletzten Zeile wiederholen!
Kannst du mir vielleicht kurz erklären was du da ganau machst; vor allem den zweiten Teil der for-Schleife!?
MfG
 
Zuletzt bearbeitet:

CEric

Aktives Mitglied
Also ich hab da noch was, abgeschnitten werden können nur die hinteren Zeilen die leer sind, also wenn Spalte 2 von 3 leer ist kann man diese nicht herausnehmen, da man sonst die Tabelle verfälscht!
 

CEric

Aktives Mitglied
Java:
public int getColumns() {
		int spalten = 0;

		for (int y = tabelle[0].length; y > 0 ; y--) { 
			
			for (int x = 0; x < tabelle.length; x++) {          

				if (tabelle[x][y] != null) {
					spalten = y;
					return spalten; 

				} else if (tabelle[x][y] == null) { 
					continue;
				}
			}
		}

		return spalten;

	}
Also das ist jetzt mal mein Quellcode für die getSpalten.Ich beginne also in der letzten Spalte y und gehe dafür alle Zeilen durch.
Ist tabelle[x][y] != null hab ich ja die längste Zeile gefunden und somit auch die Anzahl Spalten.
Andernfalls muss ich weitermachen, aber ich hab noch das Problem, wenn ich die letzte Spalte "abschneide" muss ich die vorletzte überprüfen usw., stimmt das denn so?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
R Spalten/Zeilen verschieben in zweidimensionalen Arrays? Allgemeine Java-Themen 3
R Methoden Was passiert in den markierten Zeilen? Allgemeine Java-Themen 8
Joker4632 Klassen Buffered Reader liest die Leerzeichen am Zeilen Ende nicht mehr Allgemeine Java-Themen 2
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
C Zeilen-"Vektor" aus Excel-Tabelle suchen Allgemeine Java-Themen 0
OnDemand CSV parsen mehrere Zeilen Allgemeine Java-Themen 22
KaffeeFan FileWriter nur leere Zeilen beschreiben Allgemeine Java-Themen 3
S PrintWriter.println() schreibt mehrere Zeilen Allgemeine Java-Themen 19
M Zeilen zu einem DefaultTableModel hinzufügen Allgemeine Java-Themen 1
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
D Input/Output Zeilen werden "ignoriert" beim Einlesen aus einer Textdatei Allgemeine Java-Themen 3
Todesbote Zeilen aus Excel in andere Excel Tabelle kopieren Allgemeine Java-Themen 0
I JTextArea soll nur drei Zeilen anzeigen Allgemeine Java-Themen 1
Java-Insel Zeilen im Terminalfenster unsichtbar machen Allgemeine Java-Themen 9
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
P ganze Zeilen in einem File mit .replace() ändern. Allgemeine Java-Themen 10
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
P Aus einem File Zeilen auslesen. Allgemeine Java-Themen 15
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
B Problem mit leeren Zeilen Allgemeine Java-Themen 2
B Textdatei Zeilen auslesen Allgemeine Java-Themen 7
A Email versenden mehrere Zeilen Allgemeine Java-Themen 10
K Textdatei komplett auslesen bis auf 2 Zeilen Allgemeine Java-Themen 2
S Zeilen in einer Datei löschen Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
MQue 16 Fehler pro 1000 Zeilen Allgemeine Java-Themen 11
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
D (BufferedReader) inLine() "verschluckt" zeilen ? Allgemeine Java-Themen 2
G 2 zeilen in textdatei beim auslesen verbinden Allgemeine Java-Themen 10
MQue Zeilen nach rechts verschieben Allgemeine Java-Themen 3
B Entfernen von Zeilen/Spalten aus einer Matrix Allgemeine Java-Themen 8
G einzelne zeilen aus textArea auslesen Allgemeine Java-Themen 8
T Zeilen eines Projekts zählen lassen Allgemeine Java-Themen 14
P Kompletten Textseiten in gleich lange zeilen schneiden Allgemeine Java-Themen 7
L In JTable Zeilen n. selben Dateninhalt filtern & ausgebe Allgemeine Java-Themen 16
S FileReader Methode nach Zeilen. Allgemeine Java-Themen 2
R Daten in File schreiben (mit Zeilen beachten) Allgemeine Java-Themen 12
V Zeilen lesen Allgemeine Java-Themen 3
V Anzahl der Zeilen in einem File Allgemeine Java-Themen 3
thE_29 Größe bzw. Zeilen einer Datei Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben