String in Zeilenbereich "anhaengen"

Hallo!

Ich sitze schon seit über einer Stunde an einem Problem. Und zwar rall ich einfach nicht wie ich den Inhalt meines Arrays in einem Zeilenbereich ausgeben kann.. Hier mal kurz der Quelltext von dem Dienst, welcher Fehlerhaft ist :

Java:
public void hatKnopfErzeugenGeklickt()
    {
        String lName = "", lTelefon = "", lEmail;
        hatBereichKarten.loescheAlles();
        int lZahl;
        String alphabet = "abcdefghijklmnopqrstuvwxyz";
        Random random = new Random();

        for(int i = 0; i < 1000; i++)
        {
            String randomString = generateRandomString(alphabet, random);
            hatKartenfeld[i] = new Visitenkarte(randomString + ".de" , lTelefon , lName);

           
            hatBereichKarten.haengeAn(hatKartenfeld[i] + ".de");

        }



Der Fehler lautet:
no sutiable method found for haengeAn(Visitenkarte) ...

MfG
 
Zuletzt bearbeitet von einem Moderator:

javampir

Bekanntes Mitglied
naja, der fehler ist ja ziemlich eindeutig: es gibt diese methode nicht, zumindest nicht mit diesem parameter. anhand deines übergebenen wertes vermute ich, dass die methode haengeAn(String) ist. dann würde wahrscheinlich
Java:
hatBereichKarten.haengeAn(hatKartenfeld[i].toString() + ".de");
dein problem lösen, wenn du in der Klasse Visitenkarte diese Methode überschreibst.
 

Joose

Top Contributor
.... anhand deines übergebenen wertes vermute ich, dass die methode haengeAn(String) ist. dann würde wahrscheinlich
Java:
hatBereichKarten.haengeAn(hatKartenfeld[i].toString() + ".de");
dein problem lösen, wenn du in der Klasse Visitenkarte diese Methode überschreibst.

Das wird nichts ändern. Da hier eine Stringverkettung steht wird automatisch auf den Objekten die "toString" Methode aufgerufen (näheres dazu hier: http://stackoverflow.com/questions/21505534/java-implicit-call-of-tostring-when-using-the-this-keyword ) (sofern es nicht schon ein String Objekt ist).

Aber ansonsten ja: Die Methode welche der TO verwenden will gibt es so nicht, daher wäre es interessant zu wissen mit welchen Parametern die Methode definiert ist und von welchem Typ das Objekt "hatKartenfeld" ist.
 
Das "hatKartenfeld" Objekt ist eine "Visitenkarte":

Java:
public class Visitenkarte
{
  // Bezugsobjekte

  // Attribute
  private String zName;
  private String zTelefon;
  private String zEmail;

  // Konstruktor
  public Visitenkarte(String pName, String pTelefon, String pEmail)
  {
  zName = pName;
  zTelefon = pTelefon;
  zEmail = pEmail;
  }

  // Dienste
  public String name()
  {
  return zName;
  }
  
  public String telefon()
  {
  return zTelefon;
  }
  
  public String email()
  {
  return zEmail;
  }
  
  public String toString()
  {
  return zName + " " + zTelefon + " " + zEmail;
  }
  

}

Diese wurde uns vom Lehrer zur Verfügung gestellt.
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Schön und gut, das Objekt "hatBereichKarten" ist von welcher Klasse? Wie ist in dieser Klasse die Methode "haengeAn" definiert?
 
Also das Objekt "hatBereichKarten" ist ein Zeilenbereich.
Ich kopiere mal die definition des Dienstes aus der Dokumentation:
"haengeAn
public void haengeAn(String pText)
Der Text pText wird als neue Zeile am Ende angehaengt.


Specified by:
haengeAn in class Textbereich
Parameters:
pText - der Text, der als neue Zeile angehaengt wird"
 

VfL_Freak

Top Contributor
Moin,

hmm, Deine Links funktionieren so nicht !! :(

Und "Textbereich" klingt irgendwie nicht nach "Visitenkarte"
Poste mal den gesamten relevanten Code, da hier keiner groß rumraten möchte !!

Gruß Klaus
 
Hier :

Java:
import sum.komponenten.*;
import sum.werkzeuge.*;
import sum.ereignis.*;
import java.util.Random;

public class Visitenkartenanwendung extends EBAnwendung
{
  // Objekte
  private Etikett hatEtikettGoogle;
  private Zeilenbereich hatBereichKarten;
  private Knopf hatKnopfErzeugen;
  private Knopf hatKnopfSuchen;
  private Etikett hatEtikettSuchname;
  private Knopf hatKnopfBeenden;
  private Textfeld hatTextfeldSuchname;
  private Etikett hatEtikettMeldung;
  private Etikett hatEtikettTelefon;
  private Etikett hatEtikettEmail;

  private Rechner hatRechner;
  private Rechner hatRechner2;
  private Rechner hatRechner3;
  private Rechner hatRechner4;
  private Rechner hatRechner5;

  private Visitenkarte[] hatKartenfeld;

  private Textwerkzeug hatTextwerkzeug;

  // Attribute

  /**
  * Konstruktor
  */
  public Visitenkartenanwendung()
  {
  //Initialisierung der Oberklasse
  super(1000, 1000);

  hatEtikettGoogle = new Etikett(77, 23, 150, 25, "Gööögläh");
  // Ausrichtung
  hatEtikettGoogle.setzeAusrichtung(Ausrichtung.MITTE);
  hatBereichKarten = new Zeilenbereich(23, 63, 360, 300, "");
  //hatKnopfErzeugen = new Knopf(395, 64, 100, 30, "Erzeugen");
  //hatKnopfErzeugen.setzeBearbeiterGeklickt("hatKnopfErzeugenGeklickt");
  hatKnopfSuchen = new Knopf(395, 110, 100, 30, "Suchen");
  hatKnopfSuchen.setzeBearbeiterGeklickt("hatKnopfSuchenGeklickt");
  hatEtikettSuchname = new Etikett(395, 163, 70, 25, "Suchname");
  // Ausrichtung
  hatEtikettSuchname.setzeAusrichtung(Ausrichtung.RECHTS);
  hatKnopfBeenden = new Knopf(395, 331, 100, 30, "Beenden");
  hatKnopfBeenden.setzeBearbeiterGeklickt("hatKnopfBeendenGeklickt");
  hatTextfeldSuchname = new Textfeld(395, 192, 500, 25, "");
  // Ausrichtung
  hatTextfeldSuchname.setzeAusrichtung(Ausrichtung.LINKS);
  hatEtikettMeldung = new Etikett(23, 377, 360, 25, "");
  // Ausrichtung
  hatEtikettMeldung.setzeAusrichtung(Ausrichtung.LINKS);
  hatEtikettTelefon = new Etikett(395, 232, 330, 25, "");
  // Ausrichtung
  hatEtikettTelefon.setzeAusrichtung(Ausrichtung.LINKS);
  hatEtikettEmail = new Etikett(395, 272, 330, 25, "");
  // Ausrichtung
  hatEtikettEmail.setzeAusrichtung(Ausrichtung.LINKS);

  hatRechner = new Rechner();
  hatTextwerkzeug = new Textwerkzeug();
  hatKartenfeld = new Visitenkarte[1000];
  hatKnopfErzeugenGeklickt();

  }

  private static String generateRandomString(String allowedChars,Random random) {
  int max = allowedChars.length();
  StringBuffer buffer = new StringBuffer();
  for (int i=0; i<5; i++) {
  int value = random.nextInt(max);
  buffer.append(allowedChars.charAt(value));
  }
  return buffer.toString();
  }

  /**
  * Vorher: Ereignis GeklicktvonhatKnopfErzeugen fand statt.
  * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
  */
  public void hatKnopfErzeugenGeklickt()
  {
  String lName = "", lTelefon = "", lEmail;
  hatBereichKarten.loescheAlles();
  int lZahl;
  String alphabet = "abcdefghijklmnopqrstuvwxyz";
  Random random = new Random();

  for(int i = 0; i < 1000; i++)
  {
  String randomString = generateRandomString(alphabet, random);
  lEmail = randomString;
  hatKartenfeld[i] = new Visitenkarte(lEmail , lTelefon , lName);


  hatBereichKarten.haengeAn(hatKartenfeld[i] + ".de");
  }

  }



  /**
  * Vorher: Ereignis GeklicktvonhatKnopfSuchen fand statt.
  * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
  */
  public void hatKnopfSuchenGeklickt()
  {
  String lName;
  Visitenkarte lKarte;
  int lPosition;

  lName = hatTextfeldSuchname.inhaltAlsText();
  lPosition = this.binsucheRekursiv(lName, 0, 999);
  if (lPosition == -1)
  hatEtikettMeldung.setzeInhalt("Website " + lName + " wurde nicht gefunden.");
  else
  {
  lKarte = hatKartenfeld[lPosition];
  hatEtikettMeldung.setzeInhalt("Website " + lName + " gefunden an Position " + lPosition);
  hatBereichKarten.setzeMarkierung(lPosition + 1, lPosition + 1);
  hatEtikettTelefon.setzeInhalt(lKarte.telefon());
  hatEtikettEmail.setzeInhalt(lKarte.email());
  hatBereichKarten.haengeAn(lName);
  }
  }

  public int binsucheRekursiv(String pSuchname, int pVon, int pBis)
  {
  int lMitte;

  if (pBis < pVon)
  return -1;
  else
  {
  lMitte = (pVon + pBis) / 2;
  if (hatKartenfeld[lMitte].name().compareTo(pSuchname) == 0)
  return lMitte;
  else if (hatKartenfeld[lMitte].name().compareTo(pSuchname) > 0)
  return binsucheRekursiv(pSuchname, pVon, lMitte - 1);
  else
  return binsucheRekursiv(pSuchname, lMitte + 1, pBis);
  }
  }

  /**
  * Vorher: Ereignis GeklicktvonhatKnopfBeenden fand statt.
  * Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
  */
  public void hatKnopfBeendenGeklickt()
  {
  this.beenden();
  }

}

und
Java:
public class Visitenkarte
{
  // Bezugsobjekte

  // Attribute
  private String zName;
  private String zTelefon;
  private String zEmail;

  // Konstruktor
  public Visitenkarte(String pName, String pTelefon, String pEmail)
  {
  zName = pName;
  zTelefon = pTelefon;
  zEmail = pEmail;
  }

  // Dienste
  public String name()
  {
  return zName;
  }
 
  public String telefon()
  {
  return zTelefon;
  }
 
  public String email()
  {
  return zEmail;
  }
 
  public String toString()
  {
  return zName + " " + zTelefon + " " + zEmail;
  }
}
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,
Java:
hatBereichKarten.haengeAn(hatKartenfeld[i] + ".de");
dann ist es klar: "kartenfeld" ist also ein Objekt von Typ "Visitenkarte" und somit KEIN String !!
Du musst schon gezielt die einzelnen String-Elemente (name, telefon, email) des Objektes nehmen !

Oder anders ausgedrückt: eine Methode "haengeAn" mit dem Parameter "Visitenkarte"-Objekt gibt es nicht ...

Gruß Klaus
 
komisch.

Java:
  public void hatKnopfErzeugenGeklickt()
  {
  String lName = "", lTelefon = "", lEmail;
  hatBereichKarten.loescheAlles();
  int lZahl;
  String alphabet = "abcdefghijklmnopqrstuvwxyz";
  Random random = new Random();

  for(int i = 0; i < 1000; i++)
  {
  String randomString = generateRandomString(alphabet, random);
  lEmail = randomString;
  hatKartenfeld[i] = new Visitenkarte(randomString + ".de" , lTelefon , lName);

  
  hatBereichKarten.haengeAn(hatKartenfeld[i].email() );
  }

  }

jetzt "flackert" zwar der Bildschirm beim erstellen, aber angezeigt werden die Strings nicht
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
ist auch logisch :rolleyes:

Dein Konstruktor sieht so aus
Java:
Visitenkarte(String pName, String pTelefon, String pEmail)
Dein Aufruf lautet jedoch
Java:
new Visitenkarte(randomString + ".de" , lTelefon , lName)
Fällt Dir was auf ??
Noch ein Tipp: schau' mal auf die Initialisierung von "lName" !! (wieso eigentlich 'l' ??)

Du musst schon ein bisschen genauer arbeiten und nicht einfach hoffen, dass das Programm weiß was Du willst .... :cool:

Gruß Klaus
 
Code:
public void hatKnopfErzeugenGeklickt()
  {

  hatBereichKarten.loescheAlles();
  int lZahl;
  String alphabet = "abcdefghijklmnopqrstuvwxyz";
  Random random = new Random();

  for(int i = 0; i < 1000; i++)
  {
  String randomString = generateRandomString(alphabet, random);
  lEmail = randomString;
  hatKartenfeld = new Visitenkarte(randomString + ".de" , " " , " ");

  
  hatBereichKarten.haengeAn(hatKartenfeld.email() );
  }

  }

gleicher Fehler
 

Neue Themen


Oben