cannot find symbol???

Ercan

Mitglied
Hallo,
ich bin ein JAVA-anfänger und stehe heute vor folgendem problem:

unser lehrer hat uns eine testklasse gegeben und wir sollen nun die klassen, die in der testklasse vorkommen, selber implementieren. das habe ich versucht, indem ich alle benötigten verwaltungsmethoden und konstruktoren impementiert hab. aber es kommen 10 sehr ähnliche fehler.

zb:
SchichtenModellDemo.java:27:38: cannot find symbol
symbol : method getAnwendungsHeader()
location: class java.lang.String
+ ddSender.getAnwendung().getAnwendungsHeader() +" + "

oder:
SchichtenModellDemo.java:52:40: cannot find symbol
symbol : method getNachricht()
location: class java.lang.String
+ ddReceiver.getAnwendung().getNachricht());


Java:
public class SchichtenModellDemo{
 public static void main(String[] args) {
   String senderMessage, receiverMessage;
   AnwendungsDemo adSender, adReceiver;
   DarstellungsDemo ddSender, ddReceiver;
   SitzungsDemo sdSender, sdReceiver;

  // Senderdemo
   System.out.println("\n\t***********SENDER***********\n");
   senderMessage = "Hallo Welt!";
   System.out.println("   Gesendete Nachricht:\n\t"+senderMessage);

   adSender = new AnwendungsDemo(senderMessage);
   System.out.print("\n   Anwendungschicht an Darstellungschicht:\n");
   System.out.println("\t"+adSender.getAnwendungsHeader() +" + "+ adSender.getNachricht());

   ddSender = new DarstellungsDemo(adSender);
   System.out.print("\n   Darstellungschicht an Sitzungsschicht:\n");
   System.out.println("\t"+ddSender.getDarstellungsHeader() +" + "
            + ddSender.getAnwendung().getAnwendungsHeader() +" + "
            + ddSender.getAnwendung().getNachricht());

   sdSender = new SitzungsDemo(ddSender);
   System.out.print("\n   Sitzungsschicht an ...:\n");
   System.out.println("\t"+sdSender.getSitzungsHeader()+" + "
            + sdSender.getDarstellung().getDarstellungsHeader()+" + "
            + sdSender.getDarstellung().getAnwendung().getAnwendungsHeader()+" + "
            + sdSender.getDarstellung().getAnwendung().getNachricht());

   System.out.println("\n\n   >>>>>>> UEBERTRAGUNG >>>>>>>>");

  //Empf?ngerdemo
   System.out.println("\n\n\t***********RECEIVER***********");
   sdReceiver = new SitzungsDemo(sdSender);
   System.out.print("\n   ... an Sitzungsschicht:\n");
   System.out.println("\t"+sdReceiver.getSitzungsHeader()+" + "
            + sdReceiver.getDarstellung().getDarstellungsHeader()+" + "
            + sdReceiver.getDarstellung().getAnwendung().getAnwendungsHeader()+" + "
            + sdReceiver.getDarstellung().getAnwendung().getNachricht());

   ddReceiver = new DarstellungsDemo(sdReceiver.getDarstellung());
   System.out.print("\n   Sitzungschicht an Darstellungsschicht:\n");
   System.out.println("\t"+ddReceiver.getDarstellungsHeader() +" + "
            + ddReceiver.getAnwendung().getAnwendungsHeader() +" + "
            + ddReceiver.getAnwendung().getNachricht());

   adReceiver = new AnwendungsDemo(ddReceiver.getAnwendung());
   System.out.print("\n   Darstellungschicht an Anwendungsschicht:\n");
   System.out.println("\t"+adReceiver.getAnwendungsHeader() +" + "
            +adReceiver.getNachricht());

   receiverMessage = adReceiver.getNachricht();
   System.out.println("\n   Empfangene Nachricht:\n\t"+receiverMessage);
   System.out.println("\n\n\n");
 } //main
} //SchichtenModellDemo

der compiler hat also den 2ten getter nicht gefunden. bis jetzt haben wir allerdings nur eine methode mit einem objekt aufgerufen. (zb. objekt.methode())Wie sieht es mit objekt.methode1().methode2() aus? wo muss ich was implementieren?
 
was liefert ddSender.getAnwendung()? Ich nehm mal an ein objekt von der Klasse, die getAnwendungsHeader() implementiert. macht sie das auch? Also imho bräuchten wir für die Fehler die Klassen von denen du die Objekte instanziierst. So kann man nur raten.
 
ich habe bis jetzt nur die verwaltungsmethoden und konstruktoren der drei klassen implementiert
AnwendungsDemo:
Java:
public class AnwendungsDemo {

  // Anfang Attribute
  private String anwendungsHeader;
  private String nachricht;
  // Ende Attribute


  
  public AnwendungsDemo(String par){

  }

  // Anfang Methoden

  public String getNachricht() {
    return nachricht;
  }

  public String getAnwendungsHeader() {
    return anwendungsHeader;
  }

  // Ende Methoden
}

DarstellungsDemo
Java:
public class DarstellungsDemo {

  // Anfang Attribute
  private String anwendung;
  private String anwendungsHeader;
  private String nachricht, darstellungsHeader;
  // Ende Attribute

  public DarstellungsDemo(){

  }
  
  public DarstellungsDemo(String par){

  }

  public DarstellungsDemo(AnwendungsDemo par) {

  }

  // Anfang Methoden
  public String getDarstellungsHeader(){
    return darstellungsHeader;
  }
  public String getAnwendung() {
    return anwendungsHeader;
  }

  public String getAnwendungsHeader() {
    return anwendungsHeader;
  }

  public String getNachricht() {
    return nachricht;
  }
  


  // Ende Methoden
}
SitzungsDemo:
Java:
public class SitzungsDemo {

  // Anfang Attribute
  private String darstellung;
  private String darstellungsHeader;
  private String anwendung;
  private String anwendungsHeader;
  private String nachricht, sitzungsHeader;
  // Ende Attribute


  // Anfang Methoden
  public SitzungsDemo(DarstellungsDemo par) {

  }
  
  public SitzungsDemo(SitzungsDemo par){

  }

  public String getDarstellung() {
    return darstellung;
  }

  public String getAnwendung() {
    return anwendung;
  }

  public String getAnwendungsHeader() {
    return anwendungsHeader;
  }

  public String getNachricht() {
    return nachricht;
  }
  
  public String getSitzungsHeader(){
    return sitzungsHeader;
  }

  // Ende Methoden
}
 
Deine Attribute in allen Klassen sind falsch deklariert. Warum Strings?? Ist mir neu, dass ein String die Methode getAnwendungsHeader() implementiert 🙂
 
[JAVA=23] sdSender = new SitzungsDemo(ddSender);
...
...
+ sdSender.getDarstellung().getDarstellungsHeader()+" + "
...[/code]
Was willst Du denn mit solchen Sachen erreichen??

Du hast ein Object vom Typ SitzungsDemo --> sdSender.
An diesem Objekt kannst Du Methoden aufrufen wie getDarstellung(), getDarstellungsHeader()... die alle einen String zurückgeben
In Zeile 26 der Klasse SchichtenModellDemo versuchst Du eigentlich folgendes:
Java:
String text = sdSender.getDarstellung();
text.getDarstellungsHeader(); //--> geht nicht da text vom Typ String
Vermutlich willst Du hier einfach nur
[JAVA=26]+ sdSender.getDarstellungsHeader()+" + "[/code]
Das selbe gilt auch für die folgenden Zeilen
 
an der klasse SchichtenmodellDemo soll nichts verändert werden. diese klasse habe ich so bekommen und soll dazu die drei unterklassen erstellen.
anscheinend findet der compiler hier nur .getAnwendung():
Java:
   ddSender = new DarstellungsDemo(adSender);
   System.out.print("\n   Darstellungschicht an Sitzungsschicht:\n");
   System.out.println("\t"+ddSender.getDarstellungsHeader() +" + "
            + ddSender.getAnwendung().getAnwendungsHeader() +" + "
            + ddSender.getAnwendung().getNachricht());
er fragt allerdings nach .getAnwendungsHeader() und.getNachricht()
darum ist meine frage: wo sollen diese beiden methoden implementiert werden damit der compiler sie findet???
 
Wenn das tatsächlich so sein/bleiben soll, dann muss getAnwendung() ein Objekt liefern, welches die beiden Methoden implementiert
--> die Methoden raus aus der SitzungsDemo und in eine eigene Klasse
--> getAnwendung() muss ein Objekt dieser neuen Klasse liefern

oder mir getAnwendung() gibt das Objekt von SitzungsDemo sich selbst zurück - was allerdings nicht unbedingt Sinn machen würde.
 
wie schon oben gesagt musst du halt deine Attribute anders Deklarieren. Ich hab mich jetzt in den Sinn/der Logik von dem Ganzen nicht wirklich reingedacht.
Java:
  private AnwendungsDemo anwendungsHeader;
 

Zurück
Oben