Datentypen Char Array in String Array gibt Probleme

MisterPond

Mitglied
Hallo!

Ich habe ich endlich hier mal im Forum angemeldet, habe bisher nur drüber gelesen wenn ich beim suchen im www hier fündig geworden bin.

Und zwar ist der Kontext eigentlich einfach, ich will ein char array in ein string array konvertieren.
Ich habe ein Char Array vorher gefüllt, und müsste das doch eig. so als String hinbekommen:

Java:
public static char Karte[][] = new char[10][10];
..
String StringKarte = String.valueOf(Karte);

Das charArray beinhaltet folgendes:

----------
----------
----------
----------
----@-----
----------
----------
----------
----------
----------

Mein String Array gibt aber dieses hier aus:

[[C@416b13c7

Zum Hintergrund: Ich bin in einer Spieleplanung, und das wird mein Spielfeld. Und das Spielfeld möchte ich in später in einem Fenster darstellen, einfach als JTextField, und dafür muss es ja ein String sein.

Das Spielfeld besteht nur aus einem Array auf ASCII Basis.

Ich würde mich sehr über Hilfe freuen, ich habe nämlich bisher nichts gefunden was mein Problem beheben kann ..

Schöne Grüße!
Ponti
 
Du übergibst ein Zweidimensionales Array... Dafür scheint es keine valueOf-Methode zu geben. Ich nehme an, es wird einfach die toString-Methode des Arrays aufgerufen, was dann ein solches Ergebnis liefert.
Erstelle doch ein String-Array und Iteriere mit einer for-schleife gleichzeitig über das String array und die erste Dimension deines Char-Arrays und befülle dann den aktuellen Platz des String arrays mit dem aktuellen char-array aus der zweiten Dimension.
 
Java:
String StringKarte = "";
for(int n = 0; n < Karte.length; n++) {
  StringKarte += String.valueOf(Karte[n]);
}
Sollte so gehen. Besser aber man arbeitet mit StringBuffer o.ä.
 
Java:
String StringKarte = "";
for(int n = 0; n < Karte.length; n++) {
  StringKarte += String.valueOf(Karte[n]);
}
Sollte so gehen. Besser aber man arbeitet mit StringBuffer o.ä.

So hab ich mir das auch gedacht, und direkt mal umgesetzt.
Da ich ein 2D Char Array habe und das später in ein großes JTextArea einsetzen will, bleibt mir ja eig. nichts anderes übrig als das 2D Char Array in ein 1D String Array zu konvertieren.

Dafür habe ich deine Variante genutzt, und in der Zeile die einzelnen Chars aneinander gepappt.
An sich funktioniert das System, aber irgendwie verhaut der mir die Zeichen .. ???:L

Das hier

----------
----------
----------
----------
----@-----
----------
----------
----------
----------
----------

Wird zu


null[C@2d8941f7[C@2d8941f7[C@2d8941f7[C@2d8941f7[C@2d8941f7[C@2d8941f7[C@2d8941f7[C@2d8941f7[C@2d8941f7[C@2d8941f7
null[C@e49d67c[C@e49d67c[C@e49d67c[C@e49d67c[C@e49d67c[C@e49d67c[C@e49d67c[C@e49d67c[C@e49d67c[C@e49d67c
null[C@11a06e38[C@11a06e38[C@11a06e38[C@11a06e38[C@11a06e38[C@11a06e38[C@11a06e38[C@11a06e38[C@11a06e38[C@11a06e38
null[C@3ba42792[C@3ba42792[C@3ba42792[C@3ba42792[C@3ba42792[C@3ba42792[C@3ba42792[C@3ba42792[C@3ba42792[C@3ba42792
null[C@162200d5[C@162200d5[C@162200d5[C@162200d5[C@162200d5[C@162200d5[C@162200d5[C@162200d5[C@162200d5[C@162200d5
null[C@1264ab4d[C@1264ab4d[C@1264ab4d[C@1264ab4d[C@1264ab4d[C@1264ab4d[C@1264ab4d[C@1264ab4d[C@1264ab4d[C@1264ab4d
null[C@f2a55aa[C@f2a55aa[C@f2a55aa[C@f2a55aa[C@f2a55aa[C@f2a55aa[C@f2a55aa[C@f2a55aa[C@f2a55aa[C@f2a55aa
null[C@245e13ad[C@245e13ad[C@245e13ad[C@245e13ad[C@245e13ad[C@245e13ad[C@245e13ad[C@245e13ad[C@245e13ad[C@245e13ad
null[C@1c5dd582[C@1c5dd582[C@1c5dd582[C@1c5dd582[C@1c5dd582[C@1c5dd582[C@1c5dd582[C@1c5dd582[C@1c5dd582[C@1c5dd582
null[C@546c585a[C@546c585a[C@546c585a[C@546c585a[C@546c585a[C@546c585a[C@546c585a[C@546c585a[C@546c585a[C@546c585a

???:L???:L???:L
 
Bei einem 2dim -Array benötigst Du verschachtelte for-Schleifen:
Java:
for (int r=0; r<Karten.length; r++) {
    for (int c=0; c<Karten[r].length; c++) {
        ....
    }
    ....
}

Variablennamen beginnen in Java mit einem kleinBuchstaben.
 
Also wenn dann schon einen StringBuilder. String-Verkettungen sind nicht nur hässlich sondern auch, weil immutable, schlecht (optimierung hin oder her, sowas schreibt man nicht). Variablen sind btw. lowerCamelCase
 
Brauch ich doch nicht zwangsweise 2 Schleifen.

Java:
public class test {

	public static void main (String... args){
		char[][] array = new char[][]{{'-','-','-'},{'-','@','-'},{'-','-','-'}};
		print2DCharArray(array);
	}

	private static void print2DCharArray(char[][] array) {
		StringBuilder strb = new StringBuilder();
		for(char[] row: array){
			strb.append(row);
			strb.append("\n");
		}
		System.out.println(strb.toString());
	}
	
}

führt doch zu

Java:
---
-@-
---
 
StringBuilder - geiler Hinweis, hat so geklappt wie ich mir das vorgestellt hab.
Traumhaft!

Danke! :toll:

MUss ich mir noch ein paar Beispiele ansehen was man mit dem Ding alles so machen kann, sieht aber sehr besser aus als meine Variante mit dem Zusammenpappen der einzelnen Fragmente.
 
Also wenn dann schon einen StringBuilder. String-Verkettungen sind nicht nur hässlich sondern auch, weil immutable, schlecht (optimierung hin oder her, sowas schreibt man nicht). Variablen sind btw. lowerCamelCase
Ja... natürlich 😉 . Aber erstens habe ich mir die "Lösung" oben nur mal eben so ungetestet aus den Ärmeln geschüttelt und zweitens kommt der StringBuilder bei mir erst bei der Optimierung zum Einsatz - schlechte Angewohnheit, aber StringBuffer war halt zu erst da und ist gegenüber dem Builder nur synchronized. Natürlich stimmt auch das mit dem camelCase - Ich verwende für Beispiele allerdings die Variablen des Fragestellers bzw. Themenstarters, damit er die "Lösung" möglichst einfach einfügen kann.
Warum meine "Lösung" aber beim Themenstarter nicht funktioniert ist mir ein Rätsel, weil bei mir hat sie dieses in einem anschliessenden Test getan.
Naja, was soll's Die Lösung mit StringBuilder steht ja nun schon dort und scheint auch zu funzen. Vorsicht aber bei dessen Verwendung in MultiThread-Anwendungen 😉
 

Zurück
Oben