2D Array mit Array[] füllen

JG12111989

Mitglied
Hallo zusammen,

ich arbeite nun seit einem halben Jahr mit Java, habe aber mit Arrays immer wieder Problem... Ich versuche derzeit ein zweidimensionales Array mit zwei Arrays zu füllen.

Es geht darum, dass ich ein zweidimensionales Array mit den Buchstaben des Alphabets füllen will (+ Leerstelle), wobei der Benutzer ein Wort eingibt, welches zuerst ins 2D-Array geschrieben wird und anschließend wird das 2D-Array noch mit den fehlenden Buchstaben des Alphabets gefüllt. Dabei soll immer überprüft werden, ob ein Buchstabe nicht schon im 2D-Array steht, damit es nicht zu Doppelungen kommt.

Hier ist mein Code:
Code:
package lernsituation_3;
import java.io.*;

class Schluessel {
   
    private int []verschl;
    private char []entschl;
    private char [][]schluessel= new char [5][6];
   
    public void schlErstellen() throws IOException {
       
        String s;
        char []schl; 
        char []alph={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '};
        BufferedReader lesen = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Bitte Schluessel eingeben: ");
        s= lesen.readLine(); schl= s.toCharArray();
       
        for(int i=0; i<=schluessel.length; i++)
        {
            for(int j=0; j<=schluessel.length; j++)
            {
                for(int z=0; z<=schl.length; z++)
                {
                    for(int u=0; u<=schluessel.length; u++)
                    {
                        if(u!=schl[z]){schluessel[i][j]=schl[z];}
                    }
                }
                for(int o=0; o<=alph.length; o++)
                {
                    for(int u=0; u<=schluessel.length; u++)
                    {
                        if(u!=alph[o]){schluessel[i][j]=alph[o];}
                    }
                }
            }
        }
    }
}

public class Lernsituation_3 {

    public static void main(String[] args) throws IOException {
   
        Schluessel test=new Schluessel();
        test.schlErstellen();
    }
   
}
 

Diabolus

Aktives Mitglied
Du bekommst immer eine ArrayIndexOutOfBoundsException! Du musst, wenn du den Schleifenzähler bei 0 anfangen lässt < und nicht <= verwenden.
Was mir noch aufgefallen ist, ist dass du bei der 2. Schleifenbedingung die selbe hast wie in der ersten. Wenn du die länge der 2. Dimension auslesen möchtest musst du statt
Code:
schluessel.length
Code:
schluessel[0].length
verwenden.
mfg Diabolus
 

JG12111989

Mitglied
Okay, auf den ArrayIndexOutOfBoundsException-Grund hätte ich selber kommen können........

Aber es funktioniert dennoch nicht. Ich versuche mein 2D-Array damit auszugeben:
Code:
for(int a=0; a<schluessel.length; a++)
  {
        for(int b=0; b<schluessel[0].length; b++)
        {
              System.out.print(schluessel[a][b]);
        }
  }

Aber es werden nur leere Stellen ausgegeben. Das Füllen des 2D-Arrays funktioniert also definitiv nicht.......
 

Flown

Administrator
Mitarbeiter
Deine Aufgabenstellung ist verdammt merkwürdig, was willst du machen? Gib eventuell auch ein Beispiel an.
 

DrZoidberg

Top Contributor
Ich bin mir auch nicht sicher was genau in das Array geschrieben werden soll. Aber versuch mal das hier.

Java:
System.out.println("Bitte Schluessel eingeben: ");
String schl = lesen.readLine();

for(int i = 0, z = 0; i < schluessel.length; i++) {
  for(int j = 0; j < schluessel[0].length; j++, z++) {
    if(z < schl.length()) {
      schluessel[i][j] = schl.charAt(z);
    } else {
      schluessel[i][j] = alph[schl.length() - z];
    }
}
 

JG12111989

Mitglied
Danke schon mal für die Mühen!! Ich erkläre es mal etwas genauer.

Ich hab das Array[][] schluessel, in das alles Buchstaben des Alphabets plus Leerstelle geschrieben werden sollen. Es läuft wie folgt ab:

Der Benutzer gibt ein Passwort ein, zB. "MENSCH", welches eingelesen wird.

In das Array[][] wird dann zuerst MENSCH geschrieben und danach alle anderen Buchstaben des Alphabets, die bereits im Array[] alph stehen, wobei es KEINE Doppelungen geben soll. Am Ende würde also im Array[][] stehen:

MENSCH
ABCDFG
IJKLOP
QRSTUV
WXYZ_

* das _ ersetzt die Leerstelle

Anschließend will ich mit diesem Array arbeiten, aber das ist hier unwichtig, weil es mein Problem ist, das Array[][] zu füllen...
 

DrZoidberg

Top Contributor
Dein Array ist 5*6, kann also 30 Zeichen speichern. Du hast aber nur 28 inklusive Leerzeichen und Unterstrich. Wie willst du da eine Dopplung vermeiden?
 

Tom299

Bekanntes Mitglied
Und was passiert, wenn jemand als Passwort z.B. Teetrinker eingibt? Dann hast du schon mal 3 e's, 2 t's, 2 r's usw. Oder darf ein PW nicht 2x den gleichen Buchstaben haben?
 

JG12111989

Mitglied
Es ist so, dass am Ende in meinem 2D-Array alle Buchstaben des Alphabets + Leerstelle stehen sollen. Die restlichen drei Speicherplätze können leer bleiben.

Selbst wenn der Benutzer ein Wort mit Buchstabendoppelungen als PW eingibt, soll auf Doppelung geprüft werden. sofern der Buchstabe bereits im 2D-Array steht, wird er nicht mehr reingeschrieben, sondern es geht mit dem nächsten Buchstaben weiter.

Bsp. "TEETRINKER":

TERINK
ABCDFG
HJLMOP
QSUVWX
YZ Leerstelle leer leer leer
 

DrZoidberg

Top Contributor
Versuch mal den Code hier
Java:
System.out.println("Bitte Schluessel eingeben: ");
String schl = lesen.readLine();
int zeilen = schluessel.length;
int spalten = schluessel[0].length;

int i = 0;
for(; i < schl.length() && i < zeilen*spalten; i++) {
  schluessel[i/spalten][i%spalten] = schl.charAt(i);
}
for(int j = 0; j < alph.length && i < zeilen*spalten;) {
  if(contains(schl, alph[j])) j++;
  else {
    schluessel[i/spalten][i%spalten] = alph[j];
    i++; j++;
  }
}
 

JG12111989

Mitglied
@DrZoidberg
Es läuft nicht.......... Ich verwende nun folgenden Quellcode:

Code:
package testumgebung;
import java.io.*;

class Schluessel {
   
  private char [][]schluessel= new char [5][6];
   
  public void schlErstellen() throws IOException {
   
  char []alph={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '};
  BufferedReader lesen = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("Bitte Schluessel eingeben: ");
  String schl = lesen.readLine();
  int zeilen = schluessel.length;
  int spalten = schluessel[0].length;

  int i = 0;
  for(; i < schl.length() && i < zeilen*spalten; i++) {
  schluessel[i/spalten][i%spalten] = schl.charAt(i);
  }
  for(int j = 0; j < alph.length && i < zeilen*spalten;) {
  if(contains(schl, alph[j])) j++;
  else {
  schluessel[i/spalten][i%spalten] = alph[j];
  i++; j++;
  }
  }

  for(int a=0; a<schluessel.length; a++)
  {
  for(int b=0; b<schluessel[0].length; b++)
  {
  System.out.print(schluessel[a][b]);
  }
  }
  }
   

  private boolean contains(String schl, char alph) {
  throw new UnsupportedOperationException("Not supported yet.");
  }
}

public class Testumgebung {

   
  public static void main(String[] args) throws IOException {
   
  Schluessel test=new Schluessel();
  test.schlErstellen();
   
  }
   
}

...aber ausgegeben wird nur:

Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
at testumgebung.Schluessel.contains(Testumgebung.java:81)
at testumgebung.Schluessel.schlErstellen(Testumgebung.java:27)
at testumgebung.Testumgebung.main(Testumgebung.java:91)
Java Result: 1
 

MWin123

Bekanntes Mitglied
...aber ausgegeben wird nur:

Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
at testumgebung.Schluessel.contains(Testumgebung.java:81)
at testumgebung.Schluessel.schlErstellen(Testumgebung.java:27)
at testumgebung.Testumgebung.main(Testumgebung.java:91)
Hast du die Meldung überhaupt gelesen?

In deinem Code steht:
Java:
 private boolean contains(String schl, char alph) {
  throw new UnsupportedOperationException("Not supported yet.");
  }
 

JG12111989

Mitglied
Diesen Teil des Quellcodes hat Netbeans mir automatisch gesetzt. Ich muss zugeben, ich kann mit diesem 'throw new' nicht viel anfangen und hab das 'contains' in der if-Schleife verwendet, weil mir das hier im Thread vorgeschlagen wurde.....
 

MWin123

Bekanntes Mitglied
Ok, da du dich nicht mit Exceptions auskennst:
Die Methode wirft immer einen Fehler, wenn sie aufgerufen wird. Das ist quasi ein Platzhalter für deinen Code.
Daher auch "Not supported yet."
 

InfectedBytes

Top Contributor
du solltest die methode mit sinnvollem Code ausfüllen.
Warum hast du die Methode überhaupt geschrieben, wenn du nicht weißt was sie machen soll?
 

JG12111989

Mitglied
du solltest die methode mit sinnvollem Code ausfüllen.
Warum hast du die Methode überhaupt geschrieben, wenn du nicht weißt was sie machen soll?

Wie gesagt, sie wurde automatisch gesetzt, als ich "contains" in der if-Schleife einfügte, wie ein Mitglied hier im Forum empfahl (s.o.)...

Am besten gehen wir zur Ausgangsfrage zurück, nämlich wie ich mein 2D-Array füllen kann... Bisher bin ich nicht viel weiter als zu Beginn, außer dass die OutOfBounds-Exception nicht mehr kommt.
 

DrZoidberg

Top Contributor
Ok, dann geb ich dir mal das komplette Programm. Das sollte jetzt aber laufen.
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test {
  private static char[] alph = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '};
  private static char[][] schluessel = new char [5][6];

  private static void printArray(char[][] a) {
    for(int i = 0; i < a.length; i++) {
      for(int j = 0; j < a[i].length; j++) {
        if(a[i][j] > 0) System.out.print(a[i][j]);
        else System.out.print(" ");
      }
      System.out.println();
    }
  }

  private static boolean contains(String s, char c) {
    return s.indexOf(Character.toLowerCase(c)) >= 0 || s.indexOf(Character.toUpperCase(c)) >= 0;
  }

  public static void main(String[] args) throws Exception {
    BufferedReader lesen = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Bitte Schluessel eingeben: ");
    String schl = lesen.readLine();
    int zeilen = schluessel.length;
    int spalten = schluessel[0].length;
 
    int i = 0;
    for(; i < schl.length() && i < zeilen*spalten; i++) {
      schluessel[i/spalten][i%spalten] = schl.charAt(i);
    }
    for(int j = 0; j < alph.length && i < zeilen*spalten;) {
      if(contains(schl, alph[j])) j++;
      else {
        schluessel[i/spalten][i%spalten] = alph[j];
        i++; j++;
      }
    }
 
    printArray(schluessel);
  }
}
 

JG12111989

Mitglied
@DrZoidberg
Soweit läuft es jetzt schon mal, danke!, wobei Doppelbuchstaben im String schl leider immer noch doppelt ins 2D-Array geschrieben werden.
Wenn ich also "ERDBEERE" eintippe, wirft er folgendes aus:

run:
Bitte Schluessel eingeben:
ERDBEERE
ERDBEE
REACFG
HIJKLM
NOPQST
UVWXYZ
BUILD SUCCESSFUL (total time: 10 seconds)

Und kannst du mir vllt erklären, was in der contains-Methode passiert?
 

DrZoidberg

Top Contributor
So. Jetzt sollte er keine Buchstaben mehr doppelt ausgeben.
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test {
  private static char[] alph = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' '};
  private static char[][] schluessel = new char [5][6];
 
  private static void printArray(char[][] a) {
    for(int i = 0; i < a.length; i++) {
      for(int j = 0; j < a[i].length; j++) {
        if(a[i][j] > 0) System.out.print(a[i][j]);
        else System.out.print(" ");
      }
      System.out.println();
    }
  }
 
  private static boolean contains(String s, char c) {
    return s.indexOf(Character.toLowerCase(c)) >= 0 || s.indexOf(Character.toUpperCase(c)) >= 0;
  }
 
  public static void main(String[] args) throws Exception {
    BufferedReader lesen = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Bitte Schluessel eingeben: ");
    String schl = lesen.readLine();
    int zeilen = schluessel.length;
    int spalten = schluessel[0].length;
   
    int i = 0;
    for(int j = 0; j < schl.length() && i < zeilen*spalten; j++) {
      if(schl.indexOf(schl.charAt(j)) == j) {
        schluessel[i/spalten][i%spalten] = schl.charAt(j);
        i++;
      }
    }
    for(int j = 0; j < alph.length && i < zeilen*spalten; j++) {
      if(!contains(schl, alph[j])) {
        schluessel[i/spalten][i%spalten] = alph[j];
        i++;
      }
    }
   
    printArray(schluessel);
  }
}

Die contains Methode prüft, ob der Buchstabe c - entweder als Groß- oder Kleinbuchstabe - irgendwo im String s enthalten ist.
 

Flown

Administrator
Mitarbeiter
Eine kurze Frage, ist das eine Hausübung oder brauchst du sowas für etwas bestimmtes? Musst du das händisch mit Arrays lösen oder geht was übergeordnetes auch?
 

JG12111989

Mitglied
@DrZoidberg
Vielen Dank, jetzt läuft es einwandfrei!!

@Flown
Ich muss ein Programm zum Verschlüsseln von Texten schreiben, bei dem erst ein Passwort eingelesen wird, dann das 2D-Array mit dem restlichen Alphabet plus Leerstelle gefüllt wird, damit ich jeden Buchstaben zur Verfügung habe.

Als nächstes, was aber hier im Quellcode noch nicht vorhanden ist, gibt der Benutzer einen zu verschlüsselnden Text ein und das Programm gibt anschließend anstelle des Textes für jeden Buchstaben die Stelle im 2D-Array aus.

Angenommen das A steht an Stelle schluessel[3][1], so gibt das Programm mir als Verschlüsselung für den Buchstaben A die Zahl 31 aus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
sashady 2D-Array mit Zahlenmuster füllen Java Basics - Anfänger-Themen 4
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
Z Char Array an zufälligen stellen mit einem "x" füllen. Java Basics - Anfänger-Themen 4
T Array füllen Java Basics - Anfänger-Themen 11
A Array richtig füllen Java Basics - Anfänger-Themen 2
krgewb Array später füllen Java Basics - Anfänger-Themen 1
A Ein Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
B Array via Schleife mit ungeraden bzw geraden Zahlen füllen Java Basics - Anfänger-Themen 7
A Methoden Array mit Methode nacheinander füllen Java Basics - Anfänger-Themen 3
K Array mit for-each Schleife füllen Java Basics - Anfänger-Themen 5
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
K String Array basierend auf int Array füllen Java Basics - Anfänger-Themen 2
Y Erste Schritte Spielfeld, Array füllen mit Treffern...?! Java Basics - Anfänger-Themen 3
K Zweidimensionales Array erstellen und zufällig mit 0 und 1 füllen Java Basics - Anfänger-Themen 11
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
W Erste Schritte füllen Attribute java Klasse in for Schleife und Array Java Basics - Anfänger-Themen 16
B Methoden Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
C zwei dimensionales array mit "1 " füllen Java Basics - Anfänger-Themen 8
H zweidimensionales array füllen Java Basics - Anfänger-Themen 6
J Array mit Zahlen füllen Java Basics - Anfänger-Themen 28
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
B Array erstellen,ausgeben,mit zufallszahlen füllen aber wie ? Java Basics - Anfänger-Themen 1
S Mehrdimensionales Array füllen Java Basics - Anfänger-Themen 1
P Ein Array mit der Eingaber der User füllen und ausgeben Java Basics - Anfänger-Themen 6
M Kann einen Array nicht füllen, im Nachhinein nur "null"-Werte Java Basics - Anfänger-Themen 11
M char Array füllen Java Basics - Anfänger-Themen 2
L String array mit split füllen Java Basics - Anfänger-Themen 14
T Erste Schritte Int Array zufällig mit Zahlen füllen Java Basics - Anfänger-Themen 7
P Objekt mit Werten aus Array füllen Java Basics - Anfänger-Themen 10
L GridLayout mit JLabel-Array füllen Java Basics - Anfänger-Themen 12
X Array Füllen Java Basics - Anfänger-Themen 16
E Array mit Zufallswerten von 1 bis 45 ohne Wiederholung füllen Java Basics - Anfänger-Themen 21
R Nächstes leeres Feld im array füllen? Java Basics - Anfänger-Themen 14
B Array füllen Java Basics - Anfänger-Themen 14
S Array Liste füllen Java Basics - Anfänger-Themen 16
J double-Array mit Werten von Methode füllen und an andere Methode übergeben Java Basics - Anfänger-Themen 3
K Int Array mit "Leerzeichen" füllen Java Basics - Anfänger-Themen 2
F Datentypen Zweidimensionales Array füllen Java Basics - Anfänger-Themen 6
D Array zufällig mit 1 oder 0 oder mit true oder false füllen Java Basics - Anfänger-Themen 5
H mit Schleife ein Array mit Objekten füllen Java Basics - Anfänger-Themen 3
S Mehrdimensionales Array füllen und kopieren! Java Basics - Anfänger-Themen 14
B Int Array mit Zufallszahlen füllen Java Basics - Anfänger-Themen 8
G Array mit Stringtokenizer füllen Java Basics - Anfänger-Themen 2
C Array mit int Werten füllen ( von z.B. 1 - x ) Java Basics - Anfänger-Themen 13
M Zweidimensionales dynamisches Array füllen Java Basics - Anfänger-Themen 2
S Object Array füllen Java Basics - Anfänger-Themen 8
G mit setMethode array füllen Java Basics - Anfänger-Themen 4
0 Array mit unterschiedlichen Objekten füllen? Java Basics - Anfänger-Themen 8
R String Array füllen? Java Basics - Anfänger-Themen 2
O must be an array type (String array füllen) Java Basics - Anfänger-Themen 7
C Array füllen Java Basics - Anfänger-Themen 5
P Array füllen & sortieren Java Basics - Anfänger-Themen 3
M Array mit Werten füllen und sortieren Java Basics - Anfänger-Themen 2
C Byte-Array mit Dateiinhalt füllen Java Basics - Anfänger-Themen 7
M Array mit Alphabet füllen Java Basics - Anfänger-Themen 4
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben