Problem beim befüllen von Arrays
-
Hi, ich habe folgende Aufgabe:
Sie sollen als Teil eines Programms zum Erstellen von Kreuzworträtseln eine Klasse Wortgitter implementieren und mit einer Klasse WortgitterTest testen. Sie erhalten folgendes Pflichtenheft:
a) Die Klasse Wortgitter verfügt über die Attribute breite, hoehe sowie über ein zweidimensionales Array gitter mit Elementen vom Typ char.
b) Der Konstruktor bekommt Werte für breite und hoehe übergeben, die danach nicht mehr geändert werden können. Außerdem erzeugt der Konstruktor ein Objekt für gitter mit breite und hoehe als Dimensionen. Das Array wird mit Leerzeichen initalisiert.
c) Implementieren Sie eine Methode textHorizontal, die eine Zeile, eine Spalte sowie einen String übergeben bekommt. Der String soll ab der Position [Zeile,Spalte] horizontal ins Wortgitter eingetragen werden. Buchstaben, die rechts die Gittergrenzen verlassen, sollen ignoriert werden, ohne dass Programmfehler auftreten (clipping).
d) Implementieren Sie eine Methode textVertikal, die eine Zeile, eine Spalte sowie einen String übergeben bekommt. Der String soll ab der Position [Zeile,Spalte] vertikal ins Wortgitter eingetragen werden. Buchstaben, die unten die Gittergrenzen verlassen, sollen ignoriert werden, ohne dass Programmfehler auftreten (clipping).
e) Implementieren Sie eine Methode abfragen, die eine Zeile und eine Spalte übergeben bekommt und das Zeichen an der entsprechenden Position als Ergebnis liefert.
f) Schreiben Sie eine Testklasse, die ein neues Wortgitter anlegt, einige Worte horizontal und vertikal einträgt, und dann das Gitter auf dem Bildschirm ausgibt.
habe auch schon folgenden Code geschrieben:
public class wortgitter { private int breite; private int hoehe; private char[][] gitter; public wortgitter(int hoehe, int breite) { this.hoehe = hoehe; this.breite = breite; this.gitter = new char[hoehe][breite]; for(int i = 0; i < this.gitter.length; i++) { for(int j = 0; j < this.gitter[i].length; j++) { gitter[i][j] = '-'; } } } public void texthorizontal(String horizontal, int zeile, int spalte) { for(int j = spalte; j < horizontal.length(); j++) { this.gitter[zeile][j] = horizontal.charAt(j); } } public void textvertikal(String vertikal, int zeile, int spalte) { for(int i = zeile; i < vertikal.length(); i++) { this.gitter[i][spalte] = vertikal.charAt(i); } } public char abfragen(int zeile, int spalte) { return this.gitter[zeile][spalte]; } public void ausgeben() { for(int i = 0; i < this.gitter.length; i++) { for(int j = 0; j < this.gitter[i].length; j++) { System.out.print(this.gitter[i][j] + " "); } System.out.println(); } } }
Das Array habe ich mit nem Bindestrich der Übersicht halber initialisiert.
Das Problem ist, dass es nur vernünftig funktioniert wenn ich ein Wort horizontal schreibe und es bei der Position (x,0) und vertikal bei der Position (0,y) setze.
Ich wäre über Ratschläge dankbar
MfG Robert
-
Und was passiert in den anderen Fällen?
-
du erstellst dein array zeilenweise orientiert
this.gitter = new char[hoehe][breite];
greifst aber darauf zu, als wäre es spaltenweise orientiert
public char abfragen(int zeile, int spalte) { return this.gitter[zeile][spalte]; }
-
danke für eure Antworten, hab die Lösung heute Vormittag aber selber noch gefunden, eigentlich ziemlich dämlich mein Fehler
wenn die for schleife bei der Zeilennummer startet und bis zur wortlänge läuft kann ja nichts vernünftiges bei rumkommen
das is meine Lösung jetzt
public void texthorizontal(String horizontal, int zeile, int spalte) { for(int i = 0; i < horizontal.length(); i++) { this.gitter[zeile][i+spalte] = horizontal.charAt(i); } } public void textvertikal(String vertikal, int zeile, int spalte) { for(int i = 0; i < vertikal.length(); i++) { this.gitter[i+zeile][spalte] = vertikal.charAt(i); } }
die auch sehr gut funzt
@Javanna da mag meine Schreibweise vielleicht etwas verwirrend sein, aber das war die einzige Methode die von Anfang an funktioniert hat
vielen Dank für eure Antworten