# Wort in seine Buchstaben zerlegen



## Agent Smith (13. Okt 2007)

Hallo !


 wie kann man ein Wort in seine Buchstaben "zerlegen" lassen, damit diese Buchstaben einzelnd bearbeitet werden   können ?  ???:L 
 Das soll wohl mit einem Sortier Algorithmus gehen. Aber ich weiß nicht welchen ich nehmen soll, es gibt so viele...


----------



## merlin2 (13. Okt 2007)

Du willst also ein Wort wie "Haus" in 'H', 'a', 'u', 's' zerlegen?

```
"Haus".toCharArray()
```


----------



## Agent Smith (13. Okt 2007)

Und wie mache ich das mit beliebigen Wörtern ?
Ich will erst mal ein Wort eingeben, dass wird als String umgewandelt und in einem label ausgegeben. So weit bin ich.
Dann soll dieses Wort in dessen Buchstaben zerlegt werden.
Und dann erstmal diese zerlegten Buchstaben getrennt durch ein Komma oder ein Leerzeichen wieder ausgeben.


----------



## merlin2 (13. Okt 2007)

Schreibe statt _"Haus"_ _irgendEinString_.


----------



## Agent Smith (13. Okt 2007)

ich hab oben String = a; gesetzt. 
Und dann a.toCharArray();
Aber wie gibt der das denn dann getrennt aus ? Wenn ich in nem neuen Label in der Klammer (""+a) mache passiert nichts.


----------



## merlin2 (13. Okt 2007)

Poste doch bitte deinen vollständigen Code.


----------



## Agent Smith (13. Okt 2007)

```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.String;


public class f extends Applet
{
  TextField textField1 = new TextField();

 String a;
 Label label1 = new Label();
  Label label2 = new Label();
  public void paint(Graphics g)
  {

  }

  public f() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {

    textField1.setBounds(new Rectangle(53, 64, 176, 26));
    textField1.addActionListener(new f_textField1_actionAdapter(this));
    this.setLayout(null);

    label1.setBounds(new Rectangle(52, 112, 197, 30));
    
    label2.setBounds(new Rectangle(48, 173, 188, 34));
    this.add(textField1, null);
    this.add(label1, null);
    this.add(label2, null);
  }

  void textField1_actionPerformed(ActionEvent e) {
   a = String.valueOf(textField1.getText());
   textField1.setText(""+a);
  label1.setText(""+a);
  
  "a".toCharArray();
  label2.setText(""+a);
  }

}
```

Von Zeile 42 bis 48.


----------



## Guest (13. Okt 2007)

:shock: 
	
	
	
	





```
void textField1_actionPerformed(ActionEvent e) { 
   a = textField1.getText(); 
   label1.setText(a); 
   label2.setText(java.util.Arrays.toString(a.toCharArray())); 
}
```


----------



## Agent Smith (13. Okt 2007)

Der hat ein Problem mit "toString" , der sagt :

toString() in java.lang.Object kann auf (char[]) nicht angewendet werden

Ich hab dann oben noch java.lang.Object; eingegeben, aber das Problem bleibt.

Hä ups hab gar nicht gelesen , dass du nicht Merlin bist und gar nicht gepeilt, dass du n komplett anderen Code hast...also nehme ich diesen Post zurück..


----------



## Guest (13. Okt 2007)

Java Version < 1.5?


----------



## Agent Smith (13. Okt 2007)

Keine Ahnung. So wie ich das hab klappt es. Will nur die eingegebenen Wörter zerlegen.


----------



## merlin2 (13. Okt 2007)

Auf die Schnelle zusammengebastelt:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class WortInBuchstabenZerlegen extends JFrame {
  // Anfang Variablen
  JTextField jtf = new JTextField();
  JButton jbu = new JButton();
  JLabel jlb = new JLabel();
  // Ende Variablen

  public WortInBuchstabenZerlegen (String Title) {
    // Frame-Initialisierung
    super (Title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent evt) {System.exit(0);}});
    setSize(300, 300);
    getContentPane().setLayout(new BorderLayout());

    // Anfang Komponenten

    getContentPane().add(jtf, BorderLayout.NORTH);
    jbu.setText("Zerlegen");
    getContentPane().add(jbu, BorderLayout.CENTER);
    jbu.addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent evt) {
        jbuActionPerformed (evt);}});

    getContentPane().add(jlb, BorderLayout.SOUTH);
    // Ende Komponenten

  }

  // Anfang Ereignisprozeduren
  public void jbuActionPerformed (ActionEvent evt) {
    jlb.setText(java.util.Arrays.toString(jtf.getText().toCharArray()));
  }
  // Ende Ereignisprozeduren

  public static void main (String args[]) {
    new WortInBuchstabenZerlegen("WortInBuchstabenZerlegen").setVisible(true); //show(); in setVisible(true); geändert.
  }
}
```


----------



## Guest (13. Okt 2007)

Agent Smith hat gesagt.:
			
		

> Keine Ahnung. So wie ich das hab klappt es. Will nur die eingegebenen Wörter zerlegen.


Was kommt im DOS-Fenster, wenn du das hier ausführst?

java -version


----------



## Agent Smith (13. Okt 2007)

@merlin2


eh cool...und wo genau zerlegt der die Wörter ? Das Programm ist komplett anders als meins...könnt ich denn nicht meins so umwandeln, dass es auch Wörter zerlegen kann ?


----------



## merlin2 (13. Okt 2007)

Natürlich kannst du auch dein Programm ändern. Aber da du es unvollständig gepostest hast (Klasse f_textField1_actionListener fehlt), habe ich lieber ein neues geschrieben.
Die Zerlegung findet in Zeile 36 statt und verwendet dieselbe Methode zur Zerlegung wie deins.


----------



## Agent Smith (13. Okt 2007)

```
class f_textField1_actionAdapter implements java.awt.event.ActionListener {
  f adaptee;

  f_textField1_actionAdapter(f adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.textField1_actionPerformed(e);
  }
}
```

hier ist der Rest. Ich dachte der wäre nicht notwendig....Soll ich also den Befehl von Zeile 36 in meins reinkopieren??


----------



## Agent Smith (13. Okt 2007)

```
class f_textField1_actionAdapter implements java.awt.event.ActionListener {
  fickdeinemutter adaptee;

  f_textField1_actionAdapter(f adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.textField1_actionPerformed(e);
  }
}
```

hier ist der Rest. Ich dachte der wäre nicht notwendig....Soll ich also den Befehl von Zeile 36 in meins reinkopieren??

Bei 


```
(java.util.Arrays.toString(jtf.getText().toCharArray())
```

"java" sagt der "void" ist nicht erlaubt und bei toString " in java.lang.Object kann auf char[] nicht angewendet werden".




			
				Anonymous hat gesagt.:
			
		

> Agent Smith hat gesagt.:
> 
> 
> 
> ...



1.6.0.0_3


----------



## Guest (14. Okt 2007)

Wie compilierst du das Programm?
Ich frage es, weil der Fehler darauf hindeutet, dass bei dir die java.util.Arrays.toString(char[]) anscheinend nicht 
vorhanden ist. Dies ist aber der Fall, wenn man die Version kleiner als 1.5 verwendet oder den Compiler mit
entsprechenden Einstellungen aufruft.


----------



## Agent Smith (14. Okt 2007)

Na ja ich benutze normal den JBuilder. Und compiliere auch damit.


----------



## Guest (14. Okt 2007)

Agent Smith hat gesagt.:
			
		

> Na ja ich benutze normal den JBuilder. Und compiliere auch damit.


Und mit welchen Compiler und vor allem mit welchen Einstellungen wird dein Code compiliert?

Ich vermute hier liegt das Problem. Du hast irgendeine Einstellung im JBuilder (ob es per Default so war oder nicht),
die 1.4.x Code erwartet. Schau doch mal in den Einstellungen nach, was verwendet wird und mit welchen Einstellungen.


----------



## Agent Smith (14. Okt 2007)

Kannst du mir vielleicht sagen, was ich da genau machen muss ? Ich kenn mich da gar nicht aus...


----------



## Guest (14. Okt 2007)

JBuilder habe ich schon seit Jahren nicht mehr verwendet, aber schau doch mal unter
Project->Project Properties->... oder Tools->Preferences,  wie auch immer es dort heisst.


----------



## Agent Smith (14. Okt 2007)

Da steht bei JDK : java version 1.4.2_01-b06

Unter Projekt Eigenschaften , dann Erzeugen sind folgende Sachen aufgelistet, die mit x markierten Einstellungen sind
bei mir angehakt:


x Vor Compilieren automatisch speichern
   Projekt vor dem Erzeugen aktualisieren
x Quelltext im Ausgabepfad generieren
   Erzeugen bei Fehler automatisch abbrechen

Unter Erzeugen-Java steht:

Compiler :        Borland Make
Debug Option : Informationen über Quelle, Zeile und Variable
Ziel VM:           Java 2 SDK, v 1.2 und höher

Weitere Compiler-Optionen

x Warnungen anzeigen
x Ablehnung anzeigen
   Schlüsselwort assert aktivieren
x Ausgabeverzeichnis synchronisieren


----------



## Guest (14. Okt 2007)

Da hast du es. Installiere JDK 1.5.x oder 1.6.x und stelle diese Version in JBuilder ein, dann wird dein Programm 
funktionieren.

http://java.sun.com/javase/downloads/?intcmp=1281


----------



## Agent Smith (14. Okt 2007)

Also ich hab jetzt einfach auf das erste geklickt und fertig runtergeladen. Und was mach ich jetzt ? XD


----------



## Guest (14. Okt 2007)

Installieren und in JBuilder als Compiler einstellen, würde ich sagen.


----------



## Agent Smith (14. Okt 2007)

Also der hat das runtergeladen ,aber ich keinen Plan wo das ist.....und wie stellt man das in den JBuilder ein ? Muss mal suchen...der das mit nem Javaprog wo "Ready to download" oder so draufsteht runtergeladen.


Ok habs installiert, und der meint, dass das schon drauf ist. Wie bring ich das denn in den JBuilder rein ?

Der Ordner jdk1.6.0_03 steht hier bereit. Soll ich den einfach durch den alten mit jdk1.4 ersetzen ? Frag lieber nach...

Als hab es versucht zu ersetzen. Dann wollte der den jBuilder nicht starten. Habs rückgängig gemacht. Dann war wieder alles ok. 
Dann hab ich sone jdk library Datei von 1.4 durch eine jdk library Datei von 1.6 ersetzt, danach wollte der gar nicht mehr compilieren. Habs dann wieder rückgängig gemacht, danach wieder alles ok. Jetzt weiß ich nicht weiter...


----------



## Guest (15. Okt 2007)

Dann hast du irgendeine archaische Version von JBuilder, die mit JDK > 1.4.x nicht umgehen kann.

Ersetze das hier
	
	
	
	





```
(java.util.Arrays.toString(jtf.getText().toCharArray())
```

durch das hier
	
	
	
	





```
(charArrayToString(jtf.getText().toCharArray()))

private String charArrayToString(char[] c)
{
   StringBuffer b = new StringBuffer(c.length);
   b.append("[");
   for(int i=0; i<c.length; i++)
   {
      if(i > 0)
      {
         b.append(", ");
      }
      b.append(c);
   }
   b.append("]");
   return b.toString();
}
```
oder verwende Eclipse, statt JBuilder. Ist sowieso besser und kostet nix.

Siehe: http://www.eclipse.org/downloads/


----------



## Agent Smith (19. Okt 2007)

Der sagt zu Zeile 1 bei 
	
	
	
	





```
charArrayToString
```
  "Keine Anweisung".


----------



## Agent Smith (19. Okt 2007)

Also...ich hab jetzt was ganz anderes ausprobiert...:


```
void textField1_actionPerformed(ActionEvent e) {
        a = String.valueOf(textField1.getText()); //übernimmt den Text
        label1.setText(""+a);                     //gibt den eingegebenen Text aus
        i = a.length();                           //ermittelt die Länge der Eingabe
        label2.setText(""+i);                     //gibt die Anzahl der Buchstaben an              
        char[] zeichen= new char[i];              // Array-Feld erstellt
        char a = zeichen[0];                      //soll den ersten Buchstaben packen
        label3.setText(""+a);                     //soll den ersten Buchstaben zeigen
```

Nur...der erste Buchstabe ist für den ein Rechteck...(egal der wievielte Buchstabe...das macht der bei allen Indices..). Der gibt so'n kleines Rechteck aus, so wie wenn der ein Zeichen nicht kennt.


----------



## Murray (19. Okt 2007)

Bei der Deklaration von zeichen wird das Array zwar angelegt, aber den einzelnen Zeichen wird kein Inhalt zugewiesen. Daher haben alle Zeichen den Wert (char)0, was kein druckbares Zeichen ist und daher bei der Ausgabe im GUI zu diesem kleinen Quadrat führt.
Vielleicht solltest du an der Steller besser

```
char[] zeichen = a.toCharArray();
```
schreiben.

Und was bezweckst du damit:

```
a = String.valueOf(textField1.getText());
```

Eigentlich sollte

```
a = textField1.getText();
```
doch reichen.


----------



## Agent Smith (19. Okt 2007)

@murray


Danke Danke Danke!!!!  Das klappt !!!! XD

Ok...*wieder beruhigt*


----------



## L-ectron-X (19. Okt 2007)

@merlin2: Falls es noch nicht zur Sprache kam, hier noch ein kleiner Hinweis:
Die show()-Methode ist deprecated, es sollte nur noch setVisible(true) verwendet werden.


----------



## Agent Smith (20. Okt 2007)

Aber wie mache ich das, dass der jeden einzelnen Buchstaben ausgibt ? Ich habe jetzt eine For-schleife reingepackt. Jetzt zeigt der den letzten Buchstaben an.


```
void textField1_actionPerformed(ActionEvent e) {
        a = textField1.getText();
        label1.setText(""+a);
        i = a.length();
        label2.setText(""+i);
        char[] zeichen = a.toCharArray();
       for (int k=0; k<i;k++)
       {
         char a = zeichen[k];                
         label3.setText("" + a);                //gibt den letzten Buchstaben aus
         
       }

  }
```


----------



## Murray (20. Okt 2007)

Du gibst in der Schleife nacheinander alle Buchstaben aus, wobei immer der zuletzt gesetzte den alten Inhalt überschreibt - so bleibt am Ende natürlich nur der letzte stehen.


----------



## merlin2 (20. Okt 2007)

L-ectron-X hat gesagt.:
			
		

> @merlin2: Falls es noch nicht zur Sprache kam, hier noch ein kleiner Hinweis:
> Die show()-Methode ist deprecated, es sollte nur noch setVisible(true) verwendet werden.


Das weiß ich, trotzdem danke für den Hinweis. 
Da ich die GUI aber nicht von Hand erstellt habe, sondern ein Werkzeug benutzt habe, das leider _show();_ verwendet, habe ich vergessen, das in _setVisible(true);_ zu ändern. 
Ich ändere den Code jetzt.


----------



## JPKI (20. Okt 2007)

@Agent Smith: Schreib folgendes in Zeile 11 deines Codes:

```
label3.setText(label3.getText().concat(a));
```


----------



## Agent Smith (20. Okt 2007)

Der sagt contact oder concat  kann auf char nicht angewendet werden.
Außerdem habe ich vor, dann auf jeden einzelnen Buchsteiben zugreifen zu können... :?
Ich hab noch ne Methode reingepackt, damit die einzelnen Buchstaben nacheinander nach ungefähr einer Sekunde ausgegeben werden.
Und wenn man ein neues Wort eingeben will, löscht die alte Ausgabe nicht und hängt das Neue dran...(naja das ist nicht so tragisch, weil ich jetzt einfach ein Button eingesetzt hab, der den Inhalt vom Label wieder löscht..)


----------

