# String in Zeilenbereich "anhaengen"



## theworstprogram (1. Sep 2015)

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 :


```
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


----------



## javampir (1. Sep 2015)

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

```
hatBereichKarten.haengeAn(hatKartenfeld[i].toString() + ".de");
```
dein problem lösen, wenn du in der Klasse Visitenkarte diese Methode überschreibst.


----------



## Joose (2. Sep 2015)

javampir hat gesagt.:


> .... anhand deines übergebenen wertes vermute ich, dass die methode haengeAn(String) ist. dann würde wahrscheinlich
> 
> ```
> hatBereichKarten.haengeAn(hatKartenfeld[i].toString() + ".de");
> ...



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.


----------



## theworstprogram (2. Sep 2015)

Das "hatKartenfeld" Objekt ist eine "Visitenkarte":


```
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.


----------



## Joose (2. Sep 2015)

Schön und gut, das Objekt "hatBereichKarten" ist von welcher Klasse? Wie ist in dieser Klasse die Methode "haengeAn" definiert?


----------



## theworstprogram (2. Sep 2015)

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 (2. Sep 2015)

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


----------



## theworstprogram (2. Sep 2015)

Hier :


```
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

```
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;
  }
}
```


----------



## VfL_Freak (2. Sep 2015)

Moin,

```
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_


----------



## theworstprogram (2. Sep 2015)

komisch.


```
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


----------



## VfL_Freak (2. Sep 2015)

ist auch logisch 

Dein Konstruktor sieht so aus

```
Visitenkarte(String pName, String pTelefon, String pEmail)
```
Dein Aufruf lautet jedoch

```
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 .... 

Gruß Klaus


----------



## theworstprogram (2. Sep 2015)

```
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_


----------



## theworstprogram (2. Sep 2015)

achhhh sooooo xD


----------



## theworstprogram (2. Sep 2015)

jetzt funktioniert zwar die suche nicht, aber das war zum glück noch kein Teil der Hausaufgabe..


----------

