Drei Errors sind drei zuviel!

Guten tach liebe Community,

ich habe heute folgendes Problem, dass ich die letzten drei Errors nicht gebacken bekomme. Habe diese schon von 16 auf drei hinunter gesetzt. Aber auch da bin ich jetzt sehr überfragt. An den Klammern dürfte es nicht liegen es sind genauso viele offen wie geschlossen.

Das Programm(unten die Errors):

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

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 11.09.2011
  * @author  MikeY
  */

public class BMIRechner extends Frame {
  // Anfang Attribute
  private JLabel jLabel1 = new JLabel();
  private JLabel jLabel2 = new JLabel();
  private JLabel jLabel3 = new JLabel();
  private JLabel jLabel5 = new JLabel();
  private JLabel jLabel6 = new JLabel();
  private JLabel jLabel7 = new JLabel();
  private JLabel jLabel8 = new JLabel();
  private JTextField tf_name = new JTextField();
  private JTextField tf_alter = new JTextField();
  private JTextField tf_gewicht = new JTextField();
  private JTextField tf_groesse = new JTextField();
  private TextArea ta_ergebnis = new TextArea("", 1, 1, TextArea.SCROLLBARS_NONE);
  private JButton bs_rechnen = new JButton();
  private JButton bs_loeschen = new JButton();
  private JButton bs_ende = new JButton();
  private ButtonGroup jButtonGroup1 = new ButtonGroup();
  private ButtonGroup jButtonGroup2 = new ButtonGroup();
  private JTextField tf_geschlecht = new JTextField();
  // Ende Attribute

  public BMIRechner(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten

    jLabel1.setBounds(8, 8, 146, 16);
    jLabel1.setText("Berechnen Sie ihren BMI");
    jLabel1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel1);
    jLabel2.setBounds(8, 40, 40, 16);
    jLabel2.setText("Name:");
    jLabel2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel2);
    jLabel3.setBounds(8, 80, 70, 16);
    jLabel3.setText("Geschlecht:");
    jLabel3.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel3);
    jLabel5.setBounds(8, 120, 73, 16);
    jLabel5.setText("Gewicht(kg):");
    jLabel5.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel5);
    jLabel6.setBounds(8, 184, 57, 16);
    jLabel6.setText("Ergebnis:");
    jLabel6.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel6);
    jLabel7.setBounds(152, 120, 67, 16);
    jLabel7.setText("Größe(cm):");
    jLabel7.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel7);
    jLabel8.setBounds(176, 80, 38, 16);
    jLabel8.setText("Alter:");
    jLabel8.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel8);
    tf_name.setBounds(72, 40, 121, 24);
    tf_name.setText("tf_name");
    cp.add(tf_name);
    tf_alter.setBounds(224, 80, 49, 24);
    tf_alter.setText("tf_alter");
    cp.add(tf_alter);
    tf_gewicht.setBounds(88, 120, 57, 24);
    tf_gewicht.setText("tf_gewicht");
    cp.add(tf_gewicht);
    tf_groesse.setBounds(224, 120, 49, 24);
    tf_groesse.setText("tf_groesse");
    cp.add(tf_groesse);
    ta_ergebnis.setBounds(8, 208, 265, 41);
    ta_ergebnis.setText("(Strings)");
    cp.add(ta_ergebnis);
    bs_rechnen.setBounds(8, 152, 73, 25);
    bs_rechnen.setText("Berechnen");
    bs_rechnen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bs_rechnen_ActionPerformed(evt);
      }
    });
    cp.add(bs_rechnen);
    bs_loeschen.setBounds(104, 152, 73, 25);
    bs_loeschen.setText("Löschen");
    bs_loeschen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bs_loeschen_ActionPerformed(evt);
      }
    });
    cp.add(bs_loeschen);
    bs_ende.setBounds(200, 152, 73, 25);
    bs_ende.setText("Ende");
    bs_ende.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bs_ende_ActionPerformed(evt);
      }
    });
    cp.add(bs_ende);
    tf_geschlecht.setBounds(88, 80, 81, 24);
    tf_geschlecht.setText("tf_geschlecht");
    cp.add(tf_geschlecht);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public void bs_rechnen_ActionPerformed(ActionEvent evt)
  {

  }

  public void bs_loeschen_ActionPerformed(ActionEvent evt)
  {
    loeschen();
  }

  public void bs_ende_ActionPerformed(ActionEvent evt)                          //Hier wird der Befehl folgen, welche das Programm beenden wird
  {
    beenden();
  }
  
  public void beenden()
  {
    System.exit(0);                                                             // Die 0 steht für ein kommentarlosen Abbruch des Pogrammes!
  }
  
  public void loeschen()                                                         // Hier werden die Befehle gegeben, für die Felder die gelöscht werden sollen.
  {
  tf_name.setText("");                                                           // Name wird gelöscht
  tf_geschlecht.setText("");                                                     // Geschlecht wird gelöscht
  tf_alter.setText("");                                                          // Alter wird gelöscht
  tf_gewicht.setText("");                                                        // Gewicht wird gelöscht
  tf_groesse.setText("");                                                        // Grösse wird gelöscht
  ta_ergebnis.setText("");                                                       // Das Ergebnis wird gelöscht
  }

public void berechnen() {
String eingabename, eingabegewicht, eingabegroesse;
String eingabealter, eingabegeschlecht;
String auswertung;
double zahlgewicht, zahlgroesse;
int zahlalter;
eingabename = tf_name.getText();
person1.setName(eingabename);
try {
eingabegewicht = tf_gewicht.getText();
zahlgewicht = Double.valueOf(eingabegewicht);
person1.setGewicht(zahlgewicht);
try {
eingabegroesse = tf_groesse.getText();
zahlgroesse = Double.valueOf(eingabegroesse);
person1.setKoerperlaenge(zahlgroesse);
try {
eingabealter = tf_alter.getText();
zahlalter = Integer.valueOf(eingabealter);
person1.setAlter(zahlalter);
eingabegeschlecht = tf_geschlecht.getText();
person1.setGeschlecht(eingabegeschlecht);
if (zahlalter < 19) {
JOptionPane.showMessageDialog(null,"Keine BMI-Berechnung unter 19 Jahren", "Achtung ein Fehler ist aufgetreten", JOptionPane.WARNING_MESSAGE);
}
else {
auswertung = person1.erstelleDiagnose();
ta_ergebnis.append("Name: "+person1.getName()+" Geschlecht: ");
ta_ergebnis.append(person1.getGeschlecht()+" Alter: ");
ta_ergebnis.append(Integer.toString(person1.getAlter()+" Jahre\n");
ta_ergebnis.append("Gewicht: "+ Double.toString(person1.getGewicht());
ta_ergebnis.append(" kg Größe: ");
ta_ergebnis.append+Double.toString(person1.getKoerperlaenge()+" cm\n");
ta_ergebnis.append(auswertung+"\n");
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Das Alter muss eine ganze Zahl sein!");
tf_alter.requestFocus();
System.out.println(e);
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Die Größe muss eine Zahl sein!");
tf_groesse.requestFocus();
System.out.println(e);
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Das Gewicht muss eine Zahl sein!!");
tf_gewicht.requestFocus();
System.out.println(e);
}
}
  public String getSelectedRadioButton(ButtonGroup bg) {
    for (java.util.Enumeration<AbstractButton> e = bg.getElements(); e.hasMoreElements();) {
      AbstractButton b = e.nextElement();
      if (b.isSelected()) return b.getText();
    }
    return null;
  }

  // Ende Methoden

  public static void main(String[] args) {
    new BMIRechner("BMIRechner");

  }
}


Die nun drei lästigen Fehler:

Java:
Compiliere K:\BMIRechner5\BMIRechner.java mit Java-Compiler
BMIRechner.java:189:67: ')' expected
ta_ergebnis.append(Integer.toString(person1.getAlter()+" Jahre\n");
                                                                  ^
BMIRechner.java:190:70: ')' expected
ta_ergebnis.append("Gewicht: "+ Double.toString(person1.getGewicht());
                                                                     ^
BMIRechner.java:192:19: not a statement
ta_ergebnis.append+Double.toString(person1.getKoerperlaenge()+" cm\n");
                  ^
3 errors
 
Füge die in den Fehlermeldungen genannten Klammern genau da ein, wo sie erwartet werden (es fehlt nämlich immer eine, zählen sollte man können 😉). Das [c]append[/c] beim letzten Fehler braucht auch noch ein paar Klammern: [c]append()[/c]

EDIT: Quark, bei der letzten Fehlermeldung musst du das angestrichene [c]+[/c] durch [c]([/c] ersetzen und in derselben Zeile vor dem [c];[/c] noch die passende schließende Klammer [c])[/c] hinzufügen.

Ark
 
Zuletzt bearbeitet:
Ich döddel na das hätte ich jetzt am wenisgten erwartet dat ne Klammer fehlt. Nungut, aber beim letzten dürfte wirklich keien Kammer fehlen, denn wenn ich noch eine hinzufügen würde, wäre es eine zuviel. 😉

Dieser würde demnach noch bleiben:
Java:
Compiliere K:\BMIRechner5\BMIRechner.java mit Java-Compiler
BMIRechner.java:192:21: not a statement
ta_ergebnis.append()+Double.toString(person1.getKoerperlaenge()+" cm\n");
                    ^
1 error
 
Java:
ta_ergebnis.append(Double.toString(person1.getKoerperlaenge()+" cm\n"));

Tuts so? Du musst den anzuhängenen String als Argument der append-methode deines StringBuilder/Buffers übergben.
Sollte ta_ergebnis ein String sein, lass das append weg^^
 
ich hab nochmal ne andere Frage^^

wo hast du eigentl. person1 her?
ich sehe nirgends ne Erzeugung ....
 
Zuletzt bearbeitet:
Java:
ta_ergebnis.append(Double.toString(person1.getKoerperlaenge()+" cm\n"));

Tuts so? Du musst den anzuhängenen String als Argument der append-methode deines StringBuilder/Buffers übergben.
Sollte ta_ergebnis ein String sein, lass das append weg^^

Genau das habe ich vor einigen Minuten auch probiert, jedoch kalibriert das Programm dann nur noch mehr Errors und das soll ja nicht das Ziel sein. xD
Es muss irgendwo und -wie eine andere Lösung geben, ich bin auch gerade am rumprobieren aber ändert man das eine kommen gleich 10 neue . :S

@über mir: Ist vorgegeebn, nix bedeutendes/ausschlaggebendes
 
Die Zeile wurde verbessert wie du's geschrieben hast und folgende Fehler treten dann wieder auf:

Vielzuviele. :S

Java:
Compiliere K:\BMIRechner5\BMIRechner.java mit Java-Compiler
BMIRechner.java:167:1: cannot find symbol
symbol  : variable person1
location: class BMIRechner
person1.setName(eingabename);
^
BMIRechner.java:171:1: cannot find symbol
symbol  : variable person1
location: class BMIRechner
person1.setGewicht(zahlgewicht);
^
BMIRechner.java:175:1: cannot find symbol
symbol  : variable person1
location: class BMIRechner
person1.setKoerperlaenge(zahlgroesse);
^
BMIRechner.java:179:1: cannot find symbol
symbol  : variable person1
location: class BMIRechner
person1.setAlter(zahlalter);
^
BMIRechner.java:181:1: cannot find symbol
symbol  : variable person1
location: class BMIRechner
person1.setGeschlecht(eingabegeschlecht);
^
BMIRechner.java:186:14: cannot find symbol
symbol  : variable person1
location: class BMIRechner
auswertung = person1.erstelleDiagnose();
             ^
BMIRechner.java:187:29: cannot find symbol
symbol  : variable person1
location: class BMIRechner
ta_ergebnis.append("Name: "+person1.getName()+" Geschlecht: ");
                            ^
BMIRechner.java:188:20: cannot find symbol
symbol  : variable person1
location: class BMIRechner
ta_ergebnis.append(person1.getGeschlecht()+" Alter: ");
                   ^
BMIRechner.java:189:37: cannot find symbol
symbol  : variable person1
location: class BMIRechner
ta_ergebnis.append(Integer.toString(person1.getAlter()+" Jahre\n"));
                                    ^
BMIRechner.java:189:27: cannot find symbol
symbol  : method toString(java.lang.String)
location: class java.lang.Integer
ta_ergebnis.append(Integer.toString(person1.getAlter()+" Jahre\n"));
                          ^
BMIRechner.java:190:49: cannot find symbol
symbol  : variable person1
location: class BMIRechner
ta_ergebnis.append("Gewicht: "+ Double.toString(person1.getGewicht()));
                                                ^
BMIRechner.java:192:36: cannot find symbol
symbol  : variable person1
location: class BMIRechner
ta_ergebnis.append(Double.toString(person1.getKoerperlaenge()+" cm\n"));
                                   ^
BMIRechner.java:192:26: cannot find symbol
symbol  : method toString(java.lang.String)
location: class java.lang.Double
ta_ergebnis.append(Double.toString(person1.getKoerperlaenge()+" cm\n"));
                         ^
13 errors
 
Javaistschwer hat gesagt.:
Es muss irgendwo und -wie eine andere Lösung geben, ich bin auch gerade am rumprobieren aber ändert man das eine kommen gleich 10 neue .

Das ist doch keine Diskussionsfrage, ein + Zeichen hat eben nicht die gleiche Bedeutung wie ein ( Zeichen. Der Vorschlag von Fuel ist korrekt, wenn dann dein Programm immer noch Fehler aufweißt, musst du eben diese ebenfalls beseitigen.
Natürlich könntest du uns diese Fehler zeigen.

Aber bevor nicht das Grundlegende bekannt ist, würde ich die Finger von graphischen Oberflächen lassen.

Grüße
 
Ist vorgegeebn, nix bedeutendes/ausschlaggebendes
Nichts Bedeutendes? Hast du dir die Fehlermeldungen schon einmal durchgelesen? In den "cannot find symbol"-Fehlermeldungen, die jetzt aufgezeigt werden, wird nämlich genau das bemängelt, was du als unbedeutend ansiehst!

Genau das habe ich vor einigen Minuten auch probiert, jedoch kalibriert das Programm dann nur noch mehr Errors und das soll ja nicht das Ziel sein. xD
Auch wenn mir in diesem Kontext das Wort "kalibrieren" nicht so recht einleuchten will: Der Compiler arbeitet in mehreren Stufen, und wenn er auf einer Stufe Fehler findet, spuckt er nur die Fehler dieser Stufe aus, geht aber nicht mehr zur nächsten Stufe. In deinem Fall: erst, als die Klammern richtig gesetzt waren, ging er zur nächsten Stufe über und hat nun (in dieser Stufe, die er vorher gar nicht erreicht hat) die nächsten Fehler gefunden.

Zur Lösung deines Problems (konkreter): Du musst jede Variable vor ihrer Verwendung deklarieren. Wie das geht, findet man in jedem Anfängerbuch. Und dass man von GUIs die Finger lassen sollte, solange man wesentliche Sprachelemente nicht beherrscht, wurde ja auch schon gesagt (und kann ich nur so unterschreiben!).

Ark
 
Zuletzt bearbeitet:
Hi,

dir fehlt die Variable "person1" bzw. der Code der ein neues Objekt dafür anlegt. Von welcher Klasse
die Variable ist, können wir so leider nicht sehen.
 
@chalkbag: Das kann ja nicht sein das alles funktioniert und dann wegen einem beschissenem Error das teil nicht starten will!? Und eine Diskussionsfrage ist das hier sicherlich und daurauf will hier keiner hinaus. Ich will lediglich wissen warum sich dieser Fehler nicht beheben lässt ohne das weitere auftreten, dass war mein anliegen.
-> Würde ich den Fehler, wie meine Vogänger beschrieben haben, bereinigen erhalte ich weitere wo ich nichtmal weiß was diese aufsich haben - "cannot find symbol", warum soll er das nicht finden können. Da bin ich mit meinem Latein am Ende. Als Einsteige hat man ja kaum eine Chance wenn die Programme einem die Fehler in drei Wörtern erklären will.
Und da kannste schreiben was'te willst es istnun mal so ..
 
Da bin ich mit meinem Latein am Ende. Als Einsteige hat man ja kaum eine Chance wenn die Programme einem die Fehler in drei Wörtern erklären will.

Als Einsteiger beschäftigt man sich auch zuerst mit Grundlagen und stürzt sich nicht gleich in die grafische Programmierung.

Java:
BMIRechner.java:189:67: ')' expected
ta_ergebnis.append(Integer.toString(person1.getAlter()+" Jahre\n");

Die Compiler sind heute schon so "intelligent" und sagen dir "Ich erwarte ein ')' Zeichen in der Zeile 67 an folgender Stelle. Was gibt es da nicht zu verstehen?
 
Zuletzt bearbeitet:
ich habe es nun auch geschafft und bin, für meine Verhältnisse, sehr weit gekommen. Nun möchte ich das mir der rechner anzeigt wann ich Über/Untergewicht habe. Allerdings soll das in Form von einer "Box" entstehen.
ich habe das schonmal probiert beim erstem Beispiel(siehe JavaCode ganz oben), allerdings zeigt er noch ein Fehler an. Undzwar diesen(siehe ganz unten):

Java:
   if (bmi< 16)
           {System.out.println(JOptionPane.showMessageDialog(null,"Sie haben starkes Übergewicht","Nachricht",JOptionPane.INFORMATION_MESSAGE));}
        else
          if (bmi>=16 && bmi<= 16.99)
              {System.out.println("Sie haben mäßiges Untergewicht.");}
          else
            if (bmi >=17 && bmi<= 18.49)
               {System.out.println("Sie haben leichtes Untergewicht.");}
            else
              if (bmi >=18.5 && bmi<=24.99)
                  {System.out.println("Sie haben normales Gewicht.");}
              else
                if (bmi>=25 && bmi<29.99)
                    {System.out.println("Sie sind Präadipositas.");}
                else
                  if (bmi>=30 && bmi<34.99)
                      {System.out.println("Sie sind Adipositas Grad 1.");}
                  else
                    if (bmi>=35 && bmi<39.99)
                        {System.out.println("Sie haben Adipositas Grad 2.");}
                    else
                          {System.out.println("Sie haben Adipositas Grad 3.");}


Java:
Rechner.java:117:61: 'void' type not allowed here
           {System.out.println(JOptionPane.showMessageDialog(null,"Sie haben starkes Übergewicht","Nachricht",JOptionPane.INFORMATION_MESSAGE));}
                                                            ^
1 error
 
Liest du eigentlich auch mal die Fehlermeldungen oder kippst du alles ungelesen ins Forum ab? Du darfst System.out.println nicht mit void füttern und das steht das auch groß und breit!
 
Allerdings muss ich ja die If else Anwendung in den bereich berechnen packen, dass heißt ich kann garkeine solche "Boxen" in diesen Befehl geben? Welche andere Möglichkeit gibt es die "Boxen" mit den Anwendung zu verknüpfen(bitte ein wenig ausführlicher damit das ein Anfänger auch verseteht. :S)
 
Okay, folgende Vermutung: Du hast schon mal davon gehört, dass [c]System.out.println()[/c] was mit "etwas auf dem Bildschirm ausgeben" zu tun hat. Dann hast du gehört, dass [c]JOptionPane.showMessageDialog()[/c] solche Boxen erzeugt. Nun hoffst du, dass eine Kombination aus beidem ("Boxen erzeugen" und "etwas auf dem Bildschirm ausgeben") eben Boxen auf dem Bildschirm ausgibt.

Wenn die Vermutung stimmt, hier eine etwas andere Darstellung dessen, welches Verhalten du zeigst: Du bist einer bestimmten Fremdsprache nicht mächtig, versuchst aber gerade, mit "das erstbeste Wort aus dem Wörterbuch abschreiben" stückweise ein Gedicht in ebendieser Fremdsprache zu verfassen.

In deinem Fall heißt die Fremdsprache Java, und das Gedicht ist hier eine grafische Benutzeroberfläche.

Und das geht schief.

(bitte ein wenig ausführlicher damit das ein Anfänger auch verseteht. :S)

Die lange Antwort habe ich gerade gegeben. Die kurze Antwort: Lies ein Buch!

… und lies bitte auch die Fehlermeldungen.

Ark
 
du könntest dir bspw. einen
Code:
String meldung
deklarieren und ihn entsprechend dem
Code:
bmi
initialisieren und anschließend per JOptionPane anzeigen lassen.

Java:
	String meldung;
		if (bmi < 16) {
			meldung = "Sie haben starkes Übergewicht";
		} else if (bmi >= 16 && bmi <= 16.99) {
			meldung = "Sie haben mäßiges Untergewicht.";
		} else if (bmi >= 17 && bmi <= 18.49) {
			meldung = "Sie haben leichtes Untergewicht.";
		} else if (bmi >= 18.5 && bmi <= 24.99) {
			meldung = "Sie haben normales Gewicht.";
		} else if (bmi >= 25 && bmi < 29.99) {
			meldung = "Sie sind Präadipositas.";
		} else if (bmi >= 30 && bmi < 34.99) {
			meldung = "Sie sind Adipositas Grad 1.";
		} else if (bmi >= 35 && bmi < 39.99) {
			meldung = "Sie haben Adipositas Grad 2.";
		} else {
			meldung = "Sie haben Adipositas Grad 3.";
		}
		JOptionPane.showMessageDialog(null, meldung, "Nachricht",
				JOptionPane.INFORMATION_MESSAGE);
 
BTW: Jemand mit einem BMI = 16,99000000000001 würde ein "Sie haben Adipositas Grad 3." als Antwort bekommen.

Ark
 
Was Ark damit sagen möchte ist, dass du Bereiche besser so absteckst x <17 und als nächstes x>=17

Ist ja auch einfache Mathematik. Willst du die Werte von 0 bis 1 ohne die 1 selbst, dann machst du es als offenes Intervall [0;1) also 0 <= x < 1 und nicht als geschlossenes Intervall mit <= 0.999999, eben weils mathematisch so nicht eindeutig ist (für diesen Fall).
 

Zurück
Oben