Frage bzgl. char Variablen

marcocux

Mitglied
Hallo Leute,

erstmal, HALLO AN ALLE, denn ich bin neu hier. Leider muss ich mir eingestehen, dass ich auch keine Java-Profi bin. Wir haben eine Hausaufgabe, in der es darum geht, die Wörter in einem String zu zählen.
Soweit so gut, direkt dazu habe ich keine Frage, sondern:

Ich hab den String zeichenkette angelegt, und in meine Methode:

char anzahl = " "; geschrieben

Damit wollte ich bezwecken, dass die Variable anzahl angelegt wird, welche ein Leerzeichen enthält. Allerdings erscheint beim compilieren dann folgende Fehlermeldung:

Compiliere C:\Dokumente und Einstellungen\Marco\Eigene Dateien\java\weoerter.java mit Java-Compiler
weoerter.java:41:20: incompatible types
found : java.lang.String
required: char
char anzahl = " ";
^
1 error

---------

Woran kann das liegen?

MfG:

Marco
 

marcocux

Mitglied
Liebe Leute,

noch etwas - ich finde den Editieren Button nicht....!
Aber gibt es in Java danach eine Methode, welche mit erlaubt, die Variable anzahl, welche mit dem leerzeichen beschrieben ist, in meinen String zu zählen?

MfG:

Marco
 

eRaaaa

Top Contributor
Wenn das eine Hausaufgabe ist, habt ihr doch entweder im Unterricht die Methoden durchgesprochen, oder aber eure Aufgabe ist es jetzt, euch damit mal selbst zu beschäftigen. Es macht keinen Sinn wenn wir dir jetzt alle benötigen Methoden vorschlagen....Schau dir doch mal die API Doc zu String beispielsweise an:
String (Java Platform SE 6)

Oder überlege dir, wie du selbst so eine Methode schreiben kannst! Davon hast du evtl. sogar mehr!
 

marcocux

Mitglied
Hi,

ich hab mich eben nochmal ran gesetzt und mir eine neue Lösung überlegt:
Java:
import java.awt.*;
import java.awt.event.*;

public class woerter extends Frame
{
  Label ein = new Label("Eingabeband:");
  Label aus = new Label("Ausgabeband:");
  TextField einTF = new TextField (380);
  TextField ausTF = new TextField (380);
  Button b1 = new Button ("Woerter bestimmen!");

  
  public woerter (){
    setTitle("woerter");
    addWindowListener (new WindowAdapter(){
      public void windowClosing (WindowEvent evt) {    dispose(); }
    });
    setSize (500,220);
    setResizable (false);
    setLayout(null);
    setVisible (true);
    ein.setBounds(20,40,90,20); add(ein);
    aus.setBounds(20,80,90,20); add(aus);
    einTF.setBounds(140,40,250,20); add(einTF);
    ausTF.setBounds(140,80,250,20); add(ausTF);
    ausTF.setEditable(false);
    b1.setBounds(130,110,300,80); add(b1);
    b1.addActionListener (new ActionListener(){
      public void actionPerformed (ActionEvent e){
        tuewas();
      }
    });

  }
  void tuewas()
  
     {
     String zeichenkette="";

     zeichenkette=einTF.getText();
     int laenge;
     laenge = zeichenkette.length();
     int wort = 0;
     int n;
     while(zeichenkette.length()<laenge)
     {
      n = zeichenkette.indexOf(' ');
     laenge = zeichenkette.length();
     zeichenkette=zeichenkette.replace("n","");
     wort++;
     }
     wort = wort+1;
     ausTF.setText("Es sind" +wort+ "Wörter");

     }

      public static void main(String[] args)
      {
        new woerter();
      }
}

Problem: Es läuft nicht wie es möchte, da zeichenkette.replace anscheinend keine Variablen ersetzen kann, oder?

MfG:

Marco
 

XHelp

Top Contributor
[JAVA=42]
laenge = zeichenkette.length();
...
while(zeichenkette.length()<laenge)
[/code]
Was soll denn deiner Meinung nach passieren?
Generell sollte es helfen, wenn du dir Debug-Ausgaben machst, dann siehst du wo der Fehler ist.
 

dirk1970

Mitglied
Java:
int laenge;
     laenge = zeichenkette.length();
     int wort = 0;
     int n;
     while(zeichenkette.length()<laenge)
     {
      n = zeichenkette.indexOf(' ');
     laenge = zeichenkette.length();
     zeichenkette=zeichenkette.replace("n","");
     wort++;
     }

bei Dir sind einige Probleme drinnen
ich vermute, Du möchtest Dir das erste Leerzeichen holen (zeichenkette.indexOf(' '), wenn Du eins gefunden hast dieses ersetzen mit leerzeichen, usw. bist Du alle Leerzeichen ersetzt hast, dabei zählst Du die Anzahl der Wörter hoch
dass die Schleife so Unsinn ist, wurde ja bereits angesprochen, bei Deinem Vorgehen müsstest Du als Kriterium haben, n==-1, das bedeutet nämlich, dass es kein Leerzeichen mehr gibt, beim replace möchtest Du nur das eine Leerzeichen an Position n ersetzten, Dein replace würde alle n ersetzen, die er findet, soll heissen, replace erwartet das zu ersetzende als ersten Parameter und ersetzt dann alle Vorkommnisse davon (es gibt aber auch ein replaceFirst!), wie gesagt das angeben was ersetzt werden soll als ersten Parameter. Damit würde dann auch Dein Vorgehen funktionieren

Generell einfacher und sinnvoller wäre es aber, wenn Du in Deiner Schleife einfach von 0 bis Länge-1 zählst, Dir mittels charAt(index) das Zeichen geben lässt und es dann auf Leerzeichen prüfst und dann Deine wortvariable hochzählst
 

marcocux

Mitglied
Hi,

oke^^ neue Überlegung:

Java:
import java.awt.*;
import java.awt.event.*;

public class woerter2 extends Frame
{
  Label ein = new Label("Eingabeband:");
  Label aus = new Label("Ausgabeband:");
  TextField einTF = new TextField (380);
  TextField ausTF = new TextField (380);
  Button b1 = new Button ("Woerter bestimmen!");


  public woerter2 (){
    setTitle("woerter2");
    addWindowListener (new WindowAdapter(){
      public void windowClosing (WindowEvent evt) {    dispose(); }
    });
    setSize (500,220);
    setResizable (false);
    setLayout(null);
    setVisible (true);
    ein.setBounds(20,40,90,20); add(ein);
    aus.setBounds(20,80,90,20); add(aus);
    einTF.setBounds(140,40,250,20); add(einTF);
    ausTF.setBounds(140,80,250,20); add(ausTF);
    ausTF.setEditable(false);
    b1.setBounds(130,110,300,80); add(b1);
    b1.addActionListener (new ActionListener(){
      public void actionPerformed (ActionEvent e){
        tuewas();
      }
    });

  }
  void tuewas()

     {
     String zeichenkette="";
     zeichenkette=einTF.getText();
     int wort = 0;
     int x = 0;
     int n =0;
     char laenge;
     while (n=zeichenkette.lenght())
     {
       laenge = zeichenkette.charAt(x);
       if (x== )
       {
       wort++;
       }
       x++;
       x++;
     }
     wort = wort+1;
     aus.TFsetText("Es sind" +wort+ "Wörter");

     }

      public static void main(String[] args)
      {
        new woerter2();
      }
}

problem: Illegal Start of expression bei if(x= )... wie kann ich das leerzeichen sonst darstellen?

MfG:

Marco
 

Final_Striker

Top Contributor
[c](laenge == ' ')[/c]

Gewöhne dir an, ordentliche Bezeichnungen für Variablen zu verwenden.
"char laenge" für eine Variable die eine Zeichen des String enthält, macht keinen Sinn.

edit:

Wenn man die Länge eine Schleife kennt, verwendet man in der Regel for-Schleifen.
 

marcocux

Mitglied
Hallo,

also, besser kanns ich es leider nicht... tut mir leid... hab wohl grad ein Brett vorm Kopf! Mein Hund is nämlich grad weggelaufen - hab ihn aber wieder!

Java:
import java.awt.*;
import java.awt.event.*;

public class woerter2 extends Frame
{
  Label ein = new Label("Eingabeband:");
  Label aus = new Label("Ausgabeband:");
  TextField einTF = new TextField (380);
  TextField ausTF = new TextField (380);
  Button b1 = new Button ("Woerter bestimmen!");


  public woerter2 (){
    setTitle("woerter2");
    addWindowListener (new WindowAdapter(){
      public void windowClosing (WindowEvent evt) {    dispose(); }
    });
    setSize (500,220);
    setResizable (false);
    setLayout(null);
    setVisible (true);
    ein.setBounds(20,40,90,20); add(ein);
    aus.setBounds(20,80,90,20); add(aus);
    einTF.setBounds(140,40,250,20); add(einTF);
    ausTF.setBounds(140,80,250,20); add(ausTF);
    ausTF.setEditable(false);
    b1.setBounds(130,110,300,80); add(b1);
    b1.addActionListener (new ActionListener(){
      public void actionPerformed (ActionEvent e){
        tuewas();
      }
    });

  }
  void tuewas()

     {
     String zeichenkette="";
     zeichenkette=einTF.getText();
     int wort = 0;
     char x = 0;
     int n =0;
     char l;
     int l2;
     l2 = zeichenkette.length();
     while (l2<n)
     {
       l = zeichenkette.charAt(x);
       if (l==' ')
       {
       wort++;
       }
       x++;
       n++;
     }
     wort = wort+1;
     ausTF.setText("Es sind"+wort+"Wörter");

     }

      public static void main(String[] args)
      {
        new woerter2();
      }
}

MfG:

Marco

PS: Aber es läuft:D
 
Zuletzt bearbeitet:

dirk1970

Mitglied
ist doch schon besser, kann aber noch nicht funktionieren (die Schleifenbedingung ist falsch!)

while (l2<n)
{
l = zeichenkette.charAt(x);
if (l==' ')
{
wort++;
}
x++;
n++;
}

jetzt nur noch die BEdingung umdrehen, weil du möchtest ja solange n<als die GEsamtlänge ist was machen
dann ist x überflüssig, nimm einfach auch da n
und dann gehts
vielleich noch etwas aufräumen, sinnvolle Variablennamen und den Code sauber formatieren...
 

Neue Themen


Oben