# Eigener String



## Ofof91 (1. Jan 2013)

Hallo community,

bei meiner Hausaufgabe ist mir die Angabe nicht ganz klar. 

Implement a class, which manages a string as array of characters (e.g. char[] data)

Examples:

MyString h= new MyString (new char[]{'H', 'i'});
MyString s= new MyString("Marc!");
h.concat(s);
System.out.println(h); // "Hi Marc!"


----------



## Gast2 (1. Jan 2013)

Du sollst eine Klasse MyString schreiben, die intern ein char[] Array vorhält.


----------



## Ofof91 (2. Jan 2013)

EikeB hat gesagt.:


> Du sollst eine Klasse MyString schreiben, die intern ein char[] Array vorhält.



Danke und für was kann man das char Feld brauchen? Es steht noch folgendes in der Angabe:

public MyString(char [] rawData) {..}  //constructor: copies the content of rawData and sets the length depending on the number of characters in the existing array


----------



## SlaterB (2. Jan 2013)

> Danke und für was kann man das char Feld brauchen?

zum Speichern der Daten, die den String ausmachen?? die einzelnen Zeichen?

> //constructor: copies the content of rawData and sets the length depending on the number of characters in the existing array 

setzt in der Tat auch meine Interpretationsfähigkeiten unter Probleme

vielleicht soll deine Klasse ein sehr großes char-Array fester Länge enthalten, auch wenn das auch nicht zu empfehlen ist,
in dem Fall müsste man sich merken, wie viel davon befüllt ist, also noch eine Variable length

vielleicht heißt das aber auch nur, ein eigenes char[] zu kopieren, genau in der Länge des Parameter


----------



## Final_Striker (2. Jan 2013)

Ofof91 hat gesagt.:


> Danke und für was kann man das char Feld brauchen?



Im dem char Array werden die einzelnen Buchstaben deiner String Klasse gespeichert.


----------



## Firephoenix (2. Jan 2013)

SlaterB hat gesagt.:


> [...]
> 
> > //constructor: copies the content of rawData and sets the length depending on the number of characters in the existing array
> 
> ...



Vermutlich wollen sie entweder das interne Array mit fixer maximalgröße das mit length beschränkt ist, oder man erzeugt ein neues Array mit der gleichen länge wie rawData.
In beiden Fällen wollen sie vermutlich auf System.arrayCopy() [EDIT]oder manuelles kopieren[/EDIT] hinaus.

Gruß


----------



## Ofof91 (2. Jan 2013)

SlaterB hat gesagt.:


> > Danke und für was kann man das char Feld brauchen?
> 
> zum Speichern der Daten, die den String ausmachen?? die einzelnen Zeichen?
> 
> ...



Das Kopieren ist mittlerweile schon klar, die zweite Sache ist anscheinend, die Länge des Feldes speichern und mit einer anderen Methode dann zurückgeben. 

Die Aufgabe ist mit Sätzen ausgestattet, die dir nicht wirklich weiterhelfen. Weiteres Beispiel..

// initializes the instance with characters of string a
public MyString(String a) {..}


----------



## SlaterB (2. Jan 2013)

diese Info ist wiederum klar wenn man die anderen sieht bzw. die Klasse an sich,
'die chars von a übernehmen', anders kann man es gar nicht ausdrücken und eine schlichte Information


----------



## ARadauer (2. Jan 2013)

"Ich bin ein String".toCharArray()


----------



## Ofof91 (2. Jan 2013)

SlaterB hat gesagt.:


> diese Info ist wiederum klar wenn man die anderen sieht bzw. die Klasse an sich,
> 'die chars von a übernehmen', anders kann man es gar nicht ausdrücken und eine schlichte Information



Es wird aber String übergeben? Warum die chars von a? 

Vielleicht sollte ich die ganze Angabe posten...


----------



## SlaterB (2. Jan 2013)

durchlesen vielleicht, 
für andere, für mich im Moment kein Widerspruch/ Problem ersichtlich, das kann man wohl zu behaupten wagen

dein MyString speichert Zeichen in einem char[], 
wenn du einen String bekommst, eine bekannte Klasse die intern auch chars hat, dann sollst du die chars dort herausholen

das sind wahrlich simple Sachverhalte, die hier mühsam eingetippt werden, oder wirklich alles spanisch?


----------



## ARadauer (2. Jan 2013)

Ofof91 hat gesagt.:


> Es wird aber String übergeben? Warum die chars von a?


Damit du lernst wie du mit arrays umgehst... 
Also natürlcih ist die aufgabe sinnlos, aber es ist halt eine spielerei um dich mit der sprache vertraut zu machen...


----------



## Ofof91 (2. Jan 2013)

Vollständige Angabe:

*//Constructors *

//creates an empty string
public MyString(){..}

//copies the content of rawData and sets the length depending on the number of characters in the existing array 
public MyString(char[] rawData){..}

//initializes the instance with characters of string a
public MyString(String a){..}

//creates a new string initialized with content of MyString a
public MyString(MyString a){..}

*//methods*

//returns the length of the string 
public int length(){..}

//returns the saved string as an instance of java.lang.String
public String toString(){..}

// returns the starting at the character with index start to the character with index end; returns null if any of the indexes given is not valid for the string
public MyString substring(int start, int end){..}

//adds the string a to the end of the existing string
public void concat(MyString a){..}

//adds the string a2 to the end of a1 and returns the result as MyString
public static MyString concat(MyString a1, MyString a2){..}

+ compareTo-, indexOf- und trim-Methoden...
*
Examples:*

MyString h= new MyString (new char[]{'H', 'i'});
MyString s= new MyString("Marc!");
h.concat(s);
System.out.println(h); // "Hi Marc!"


----------



## ARadauer (2. Jan 2013)

ja wir haben die Angabe verstanden, trotzdem musst du sie schon selber machen.
Hast du eine konkrete Frage?


----------



## Ofof91 (2. Jan 2013)

ARadauer hat gesagt.:


> ja wir haben die Angabe verstanden, trotzdem musst du sie schon selber machen.
> Hast du eine konkrete Frage?



Ja das ist schon klar, dass ich es selber machen muss, möchte ich auch, sonst hat das Ganze keinen Sinn. 

Eine konkrete Frage, ja natürlich. Es ist sinnvoll, wenn wir es Schritt für Schritt durchgehen würden.

Der erste Konstruktor hat keinen Übergabewert, auch keinen Rückgabewert. 
Sollte der etwas beinhalten? Wenn ja, was?


----------



## Ofof91 (2. Jan 2013)

Wollt ihr mir nicht weiterhelfen? 

Wenn ich mich mit der ganzen Sache jemals auskennen würde, was aber wahrscheinlich nie sein wird, würde ich jeden helfen. 

Es tut einfach weh, wenn man nicht weiterkommt und sich keine Hilfe holen kann. Manche hatten anscheinend diese Erfahrung nicht.


----------



## Gast2 (2. Jan 2013)

Konstruktoren haben nie einen Rückgabewert.



> Sollte der etwas beinhalten? Wenn ja, was?


Ja, natürlich soll der was machen:


> creates an empty string


----------



## Ofof91 (2. Jan 2013)

Ich habe aber keine Idee, wie man ein Empty String erzeugen soll?

Etwa so:

String data="";
Wenn ja, wo kann ich dann die Variable data vewenden?


----------



## Gast2 (2. Jan 2013)

Du musst dir auch mal deine Aufgabenstellung durchlesen. Dein "MyString" nutzt intern doch ein char[] Array. Was wäre also ein leerer String...? Genau, das hier: 
	
	
	
	





```
data = new char[0];
```


----------



## Ofof91 (2. Jan 2013)

Habe ich doch, die war mir aber von Anfang an nicht klar. 

Und wo kann mir diese Variable data nützlich sein?


----------



## Gast2 (2. Jan 2013)

Na in allen Methoden die dein String so anbietet 

Fang doch einfach mal an und programmier nen paar Stunden. Wenn du dann irgendwas hast, das vorzeigbar ist, dann zeigste uns das und klärst deine restlichen Probleme.


----------



## ARadauer (2. Jan 2013)

Ofof91 hat gesagt.:


> Wenn ich mich mit der ganzen Sache jemals auskennen würde, was aber wahrscheinlich nie sein wird, würde ich jeden helfen.


Klar das würdest du... ich hab aber leider nicht so viel Energie, dass ich jedem seine Aufgabe schreibe.
Wenn jemand mitdenkt und eigene Ideen einbringt, dann hilft man gerne!
Aber hier die Aufgabenstellung zu posten und zu hoffen... das wird nicht reichen...


----------



## Firephoenix (2. Jan 2013)

Wenn ihm immer noch nicht klar ist wozu er das char[]-Array benötigt dreht sich das hier eh im Kreis.


Nochmal zum mitschreiben:
-Ein String ist eine Abfolge aus chars
-Ein Array speichert eine Abfolge aus Einträgen fester größe (hier chars)
-In deiner Klasse verwaltest du ein solches Array
-Deine Klasse sieht intern also irgendwie so aus:


```
public class MyString{
private char[] chars;

//oder
private char[] chars = new char[... irgend eine feste länge ...];
private int length; //gibt an die wieviel ersten x Einträge im Array belegt sind
}
```
Welche Form genau du wählst hängt von deiner Aufgabenstellung und deinem Geschmack ab!

-Deine Klasse soll folgende Schnittstellen anbieten:


```
//creates an empty string
public MyString(){..}
```
Ein leerer String hat die Länge 0 und besteht aus keinen Zeichen. ist es so schwer, das in deiner Klasse abzubilden?



```
//copies the content of rawData and sets the length depending on the number of characters in the existing array
public MyString(char[] rawData){..}
```
Da steht schon 1-1 was du machen musst: Kopiere alle chars aus rawData irgendwie in deine Klasse und übernehme auch noch die länge.


```
//initializes the instance with characters of string a
public MyString(String a){..}
```
Im Thread wurde dir schon eine Methode vorgestellt wie du aus einem String ein char-Array bekommst, einen Konstruktor für ein char-Array hast du oben bereits geschrieben. Fällt dir irgend etwas auf?


```
//creates a new string initialized with content of MyString a
public MyString(MyString a){..}
```
Auf a kannst du z.B. toString() aufrufen, und mit dem String wieder deinen vorigen Konstruktor füttern -> gleiches Spiel wie oben.



```
//returns the length of the string
public int length(){..}
```
Ja, was könnte mit Länge wohl gemeint sein? Entweder die Anzahl der belegten Felder im Array / die Länge des Arrays (abhängig von deiner Implementierungsart). Semantisch: Die Anzahl der Buchstaben die du speicherst.


```
//returns the saved string as an instance of java.lang.String
public String toString(){..}
```
Mache aus dem char-array wieder einen String und gebe ihn zurück.
(Vielleicht hilft hier sogar mal ein Blick in die Doku? String (Java Platform SE 6))


```
// returns the starting at the character with index start to the character with index end; returns null if any of the indexes given is not valid for the string
public MyString substring(int start, int end){..}
```
Ich nehme mal an toString().substring zählt als mogeln, aber du schaffst es doch sicher ein neues Array der benötigten Länge zu erstellen, die benötigten Zeichen reinzukopieren und damit den char[]-Konstruktor aufzurufen oder?


```
//adds the string a to the end of the existing string
public void concat(MyString a){..}
```
Anhängen bedeutet lediglich die aktuellen Daten zu behalten, Platz für die alten und die neuen Daten zu schaffen (Tipp: a hat auch eine length()-Funktion), dann beide zusammenzukopieren und die alten Daten mit den kombinierten Daten zu überschreiben.


```
//adds the string a2 to the end of a1 and returns the result as MyString
public static MyString concat(MyString a1, MyString a2){..}
```
Wenn du die Methode vor der vorigen erledigst sparst du dir viel arbeit, dann kannst du nämlich in der nicht-statischen Methode einfach auf die statische zurückgreifen (conctat(this,a).

Jetzt sollte aber langsam mal Code kommen oder ein Angebot in der Jobbörse gegen Geld.

Gruß


----------



## Bernd Hohmann (2. Jan 2013)

SlaterB hat gesagt.:


> das sind wahrlich simple Sachverhalte, die hier mühsam eingetippt werden, oder wirklich alles spanisch?



Ich finde die Aufgabenstellung recht spannend - mal was anderes als "Mercedes extends Auto".

Es soll einfach nur eine abgespeckte Version von "String" entwickelt werden. Für einen Anfänger eine gute Fingerübung um ordentliche Tools zu bauen.

Bernd


----------



## Timothy Truckle (2. Jan 2013)

Bernd Hohmann hat gesagt.:


> Ich finde die Aufgabenstellung recht spannend - mal was anderes als "Mercedes extends Auto".
> 
> Es soll einfach nur eine abgespeckte Version von "String" entwickelt werden. Für einen Anfänger eine gute Fingerübung um ordentliche Tools zu bauen.


Das Problem, dass ich mit der Aufgabe habe ist: dass sie nur am Rande mit OOP zu tun hat...

bye
TT


----------



## Ofof91 (5. Jan 2013)

Naja recht viel weitergekommen bin ich nicht...

Hauptprogramm:


```
public class Str {

    
    public static void main(String[] args) {
        
        MyString a = new MyString();
        MyString b = new MyString(new char[]{'H','a','a','a'});
        MyString c = new MyString("World");
        
    }
}
```


Klasse MyString:


```
public class MyString {

    int stringlength;  
    char[] data;
    
    // creates an empty string
    public MyString()
    {
     data=new char[0];  
    }
    
    /* copies the content of rawData and sets the length depending on the number
     * of characters in the existing array */
    public MyString(char[] rawData)
    {
     data=rawData;   
     this.stringlength=data.length;
     System.out.println(data);
    }
    
    // initializes the instance with characters of string a
    public MyString(String a)
    {
     data=a.toCharArray();
     this.stringlength=data.length;
     System.out.println(data);
    }
    
    // creates a new string initialized with the content of MyString a
    public MyString(MyString a)
    {
     MyString newstring=a;
    }
    
    // returns the length of the string
    public int length()
    {
     return stringlength;
    }
 
 
}
```


----------



## Ofof91 (5. Jan 2013)

Ich weiß z.B. nicht, was ich mit der Variable data beim Empty String anfangen sollte.


----------



## Gast2 (5. Jan 2013)

Fragen? Wenn ja welche?

Ein paar Hinweise:

```
int stringlength;
```
Brauchst du nicht unbedingt. Die Länge deines Strings kannst du mit dem char[] Array bestimmen.


```
// creates a new string initialized with the content of MyString a
    public MyString(MyString a)
    {
     MyString newstring=a;
    }
```
Der Konstruktor macht keinen Sinn. Du erstellst ne Variable die sofort wieder verfällt. Laut dem Kommentar solltest du eher folgendes machen:

```
this.data = a.data;
```
Besser noch: Eine Kopie des Arrays erstellen, damit du den anderen MyString nicht beeinflusst.

Dir fehlen auch noch viele Methoden.


----------



## Landei (5. Jan 2013)

Na das ist doch schon ein Anfang! 

Ich würde die Länge übrigens immer aus der Länge des char-Arrays ermitteln. Es ist schwer, zwei Datendingse immer synchron zu halten - einmal bei einer Methode vergessen, dass sich damit die Länge ändert, schon hast du einen ganz gemeinen, schlecht zu findenden Bug.

Mal eine gestraffte Version mit ein paar kleinen Verbesserungen:


```
public class MyString {
    private char[] data;
    
    // creates an empty string
    public MyString() {
      data=new char[0];  
    }
    
    /* copies the content of rawData and sets the length depending on the number
     * of characters in the existing array */
    public MyString(char[] data) {
      this.data=data;   
    }
    
    // initializes the instance with characters of string a
    public MyString(String a) {
      data=a.toCharArray();
    }
    
    // creates a new string initialized with the content of MyString a
    public MyString(MyString that) {
      this.data = that.data;  //wenn MyString unveränderlich ist, ansonsten müsste kopiert werden, z.B. mit System.arraycopy
    }
    
    // returns the length of the string
    public int length() {
     return data.length;
    }

    @Override
    public String toString() {
        return new String(data); 
    }
}
```



Timothy Truckle hat gesagt.:


> Das Problem, dass ich mit der Aufgabe habe ist: dass sie nur am Rande mit OOP zu tun hat...
> TT



Die Aufgabe wäre wesentlich spannender, wenn man als interne Datenstruktur keine Arrays oder Collections verwenden dürfte.


----------



## Evil-Devil (5. Jan 2013)

Timothy Truckle hat gesagt.:


> Das Problem, dass ich mit der Aufgabe habe ist: dass sie nur am Rande mit OOP zu tun hat...


Zum erlernen des Verständnis ist das vollkommen unerheblich. Sinniger wäre dann vielleicht eine andere Sprache wie z.B. TurboPascal die gar kein OOP kennt...

Ich hoffe du wirst die Aufgabe am Ende meistern


----------



## Ofof91 (5. Jan 2013)

Vorerst vielen Dank an alle, einige Sachen habe ich nicht verstanden. 


```
public class MyString {
    private char[] data;
```

Warum private?     


```
// creates a new string initialized with the content of MyString a
    public MyString(MyString that) {
      this.data = that.data;  //wenn MyString unveränderlich ist, ansonsten müsste kopiert werden, z.B. mit System.arraycopy
    }
```

Hier verstehe ich den Code nicht, was steht im "that.data" drinnen? 


```
@Override
    public String toString() {
        return new String(data); 
    }
}
```

Und sowas ist mir überhaupt neu, was soll außerdem mit "@Override" erreicht werden?


----------



## Gast2 (5. Jan 2013)

> Warum private?


Weils guter Stil ist. Die Variable muss nach außen hin nicht sichtbar sein.



> Hier verstehe ich den Code nicht, was steht im "that.data" drinnen?


that.data ist das char[] Array der MyString Instanz that.



> was soll außerdem mit "@Override" erreicht werden?


Das signalisiert dem Compiler, dass du vor hast eine Methode zu überschreiben. In diesem Fall die toString() Methode aus Object.


----------



## Ofof91 (5. Jan 2013)

Was kann z.B. ein Übergabeparameter vom Typ MyString sein? Wenn ich vom Hauptprogramm aus, auf diesen Konstruktor zugreifen möchte?


```
// creates a new string initialized with the content of MyString a
    public MyString(MyString that) {
      this.data = that.data;  //wenn MyString unveränderlich ist, ansonsten müsste kopiert werden, z.B. mit System.arraycopy
    }
```


----------



## Gast2 (5. Jan 2013)

Na eine MyString Instanz natürlich.
Den Konstruktor 
	
	
	
	





```
public MyString(String a) {
```
 rufst du doch auch mit einem String (genauer: einer String Instanz) auf. Genau das gleiche gilt auch für den anderen Konstruktor.


----------



## Ofof91 (5. Jan 2013)

EikeB hat gesagt.:


> that.data ist das char[] Array der MyString Instanz that.



Und es steht das, was übergeben wird drinnen? Welches der Variable data zugewiesen wird? Und die Funktion toCharArray() darf man in diesem Fall nicht verwenden, weil es vom Datentyp her kein String ist?


----------



## Gast2 (5. Jan 2013)

Ja, ja und ja.


----------



## Ofof91 (5. Jan 2013)

EikeB hat gesagt.:


> Na eine MyString Instanz natürlich.
> Den Konstruktor
> 
> 
> ...



So in etwa?


```
MyString c = new MyString(new MyString("World"));
```


----------



## Gast2 (5. Jan 2013)

Ja.
Probier doch solche Sachen bitte eigenständig aus. Wenns Fehler gibt (die du nicht selbst lösen kannst!) dann fragste nochmal nach.


----------



## Ofof91 (5. Jan 2013)

Ok vielen Dank, eine Frage habe ich noch...


```
return new String(data);
```

Was passiert hier genau?


----------



## Gast2 (5. Jan 2013)

Wirklich? Keine Idee?
String (Java Platform SE 6)


----------



## Ofof91 (5. Jan 2013)

Die substring-Methode habe ich mittlerweile auch schon, vorerst aber ohne Fehlerbehandlung. Ich habe bezüglich der Ausgabe eine Frage, wenn ich die System.out.println jeweils bei den Konstruktoren "MyString"(), "MyString(char[] raw Data)" und "MyString(String a)" weglasse, dann wird nichts ausgegeben, nur ich verstehe nicht, warum ich das beim letzten Konstruktor nicht brauche?

Ausgabe:

Hallo
nice
World
nice
al


```
public class Str {

    
    public static void main(String[] args) {
        
        MyString a = new MyString();
        MyString b = new MyString(new char[]{'H','a','l','l','o'});
        MyString c = new MyString("nice");
        MyString d = new MyString(new MyString("World"));
        String e=c.toString();
        System.out.println(e);
        MyString f=b.substring(1,3);   
        
    }
}
```



```
public class MyString {
    private char[] data;
    
    // creates an empty string
    public MyString() {
      data=new char[0];  
      System.out.println(data);
    }
    
    /* copies the content of rawData and sets the length depending on the number
     * of characters in the existing array */
    public MyString(char[] rawdata) {
      this.data=rawdata; 
      System.out.println(data);  
    }
    
    // initializes the instance with characters of string a
    public MyString(String a) {
      data=a.toCharArray();
      System.out.println(data);
    }
    
    // creates a new string initialized with the content of MyString a
    public MyString(MyString a) {
      this.data = a.data;  
    }
    
    // returns the length of the string
    public int length() {
     return data.length;
    }
 
    @Override
    public String toString() {
        return new String(data); 
    }

   /* returns the string starting at the character with index start (inclusive)
     * to the character with index end (exclusive); returns null if any of the
     * indexes given is not valid for the string
     */
    public MyString substring(int start, int end)
    {
     String newdata=new String(data); 
     String sub=newdata.substring(start,end);
     MyString substr=new MyString(sub);
     return substr;
    }
}
```


----------



## Ofof91 (5. Jan 2013)

Naja ich darf doch die substring-Methode nicht verwenden.


----------



## Ofof91 (5. Jan 2013)

Ofof91 hat gesagt.:


> Naja ich darf doch die substring-Methode nicht verwenden.



Jetzt habe ich es...


----------



## Ofof91 (5. Jan 2013)

Ofof91 hat gesagt.:


> Die substring-Methode habe ich mittlerweile auch schon, vorerst aber ohne Fehlerbehandlung. Ich habe bezüglich der Ausgabe eine Frage, wenn ich die System.out.println jeweils bei den Konstruktoren "MyString"(), "MyString(char[] raw Data)" und "MyString(String a)" weglasse, dann wird nichts ausgegeben, nur ich verstehe nicht, warum ich das beim letzten Konstruktor nicht brauche?




Weiß jemand warum das so ist?


----------



## Gast2 (5. Jan 2013)

Ja, weil in Str Zeile 13 ein System.out.println steht.


----------



## Ofof91 (6. Jan 2013)

Du meinst in Zeile 11, aber das hat mit dem nichts zu tun?


----------



## Gast2 (6. Jan 2013)

Ja ich meine Zeile 11. Doch das hat mit der Ausgabe was zu tun, nimms doch mal raus.


----------



## gst (6. Jan 2013)

Sysouts haben eh nichts in Konstruktoren oder überhaupt in einer String-Klasse zu suchen.


----------



## Ofof91 (6. Jan 2013)

Das es mit der Ausgabe etwas zu tun hat, ist schon klar, aber was ich meine ist nicht das.

Wenn ich im Hauptprogramm auf die einzelnen Konstruktoren zugreife, wird ohne System.out.. nichts ausgegeben, außer beim letzten Konstruktor, bei dem ich kein System.out..habe, aber dennoch etwas ausgegeben wird. 


```
MyString d = new MyString(new MyString("World"));
```




gst hat gesagt.:


> Sysouts haben eh nichts in Konstruktoren oder überhaupt in einer String-Klasse zu suchen.



Zur Überprüfung, ob auf die einzelnen Konstruktoren zugegriffen wird?


----------



## gst (6. Jan 2013)

Im letzten Konstruktor wird garantiert *nichts* ausgegeben. Die Ausgabe kommt vom Aufruf des Konstruktors

```
MyString(String a)
```



> Zur Überprüfung, ob auf die einzelnen Konstruktoren zugegriffen wird?


Aha. Du siehst doch am Code welchen Konstruktor du aufrufst.


----------



## Ofof91 (6. Jan 2013)

gst hat gesagt.:


> Im letzten Konstruktor wird garantiert *nichts* ausgegeben. Die Ausgabe kommt vom Aufruf des Konstruktors
> 
> ```
> MyString(String a)
> ```




"Die Ausgabe kommt vom Aufruf des Konstruktors".....Genau, aber warum bei den anderen drei nicht? Die werden genauso aufgerufen?


----------



## Ofof91 (6. Jan 2013)

Bei der compareTo-Methode habe ich das Problem mit "ArrayIndexOutOfBoundsException", wenn die Strings unterschiedlich groß sind. Von dieser Methode aus kann ich aber auch nicht die Länge von char[] data beeinflussen.
*
Beispiel:*

Hellom wird übergeben und mit Hellon(steht im char[] data drinnen) verglichen.
Ergebnis: Methode liefert "1" zurück, da n-m (110-109=1)...

Aber sobald ich sowas habe:
Hellom als Übergabe
und Hellonn, dann kommt der Fehler, da das Feld von Hellom die Länge 6 hat.

Hat jemand eine Idee wie man dies lösen könnte?


----------



## gst (6. Jan 2013)

Wie wäre es mit aktuellem Code? Du beschreibst Verhalten, welches überhaupt zum geposteten Code passt, z.B. compareTo, obwohl dein MyString nicht Comparable ist oder 





> Wenn ich im Hauptprogramm auf die einzelnen Konstruktoren zugreife, wird *ohne* System.out.. nichts ausgegeben


 obwohl die ersten 3 Konstruktoren ein sysout enthalten. Niemand hat hier Bock auf Ratespielchen, welchen Code du lokal bei dir gerade testest.


----------



## gst (6. Jan 2013)

überhaupt *nicht* ...


----------



## Ofof91 (6. Jan 2013)

gst hat gesagt.:


> Wie wäre es mit aktuellem Code? Du beschreibst Verhalten, welches überhaupt zum geposteten Code passt, z.B. compareTo, obwohl dein MyString nicht Comparable ist oder  obwohl die ersten 3 Konstruktoren ein sysout enthalten. Niemand hat hier Bock auf Ratespielchen, welchen Code du lokal bei dir gerade testest.



Du hast die Frage nicht verstanden, diese bezieht sich nicht auf den aktuellen Code. Ist ja eine allgemeine Frage, um das Verständnisproblem aus dem Weg zu räumen.


----------



## Ofof91 (6. Jan 2013)

gst hat gesagt.:


> Wie wäre es mit aktuellem Code? Du beschreibst Verhalten, welches überhaupt zum geposteten Code passt, z.B. compareTo, obwohl dein MyString nicht Comparable ist oder  obwohl die ersten 3 Konstruktoren ein sysout enthalten. Niemand hat hier Bock auf Ratespielchen, welchen Code du lokal bei dir gerade testest.



Du hast die Frage nicht verstanden, diese bezieht sich nicht auf den aktuellen Code. Ist ja eine allgemeine Frage, um das Verständnisproblem aus dem Weg zu räumen.


----------



## Ofof91 (6. Jan 2013)

Muss ich das "@Override" immer wieder schreiben, wenn ich eine existiernde Methode überschreiben möchte?


----------



## Timothy Truckle (6. Jan 2013)

Ofof91 hat gesagt.:


> Muss ich das "@Override" immer wieder schreiben, wenn ich eine existiernde Methode überschreiben möchte?


Ja, weil der Compiler Dich dann warnen kann, wenn die Signatur nicht übereinstimmt. Solche Fehler ist andernfalls schwer zu finden.

bye
TT


----------



## Ofof91 (6. Jan 2013)

Danke TT, komischerweise funktioniert es aber so auch. Ich habe es nur ganz am Anfang vor der toString-Methode geschrieben, dann nicht mehr.
*
Zur indexOf-Methode habe ich eine Frage:*

"Hallo".indexOf("lo");

Wird bei diesem Beispiel zuerst überprüft, ob die Zeichenfolge "lo" überhaupt existiert? Und dann der Index von 'l' gesucht?


----------



## Gast2 (6. Jan 2013)

Nein, das wäre ziemlich ineffizient. Wenn du festgestellt hast ob die Zeichenfolge existiert, dann kannst du auch direkt schon feststellen wo die existiert.


----------



## Timothy Truckle (6. Jan 2013)

Ofof91 hat gesagt.:


> Danke TT, komischerweise funktioniert es aber so auch.


Falls ich mich unklar ausgedrückt habe:
Überschreiben von Methoden in erbenden Klassen funktioniert auch ohne die _@Override_-Annotation. Diese sorgt aber dafür, dass der Compiler weis, dass hier ein Override beabsichtigt ist und kann einen Fehlermeldung ausgeben, wenn die Signatur der Methode (also Name, Rückgabetyp oder Typen und Reihenfolge der Parameter) mit keiner Methode in einer der Oberklassen übereinstimmt.



Ofof91 hat gesagt.:


> *Zur indexOf-Methode habe ich eine Frage:*
> 
> ```
> "Hallo".indexOf("lo");
> ...


Ist das wichtig? 
Für mich nicht, denn der Sinn von OOP ist ja gerade, dass ich mich nicht um Implementierungsdetails in Bibliotheken kümmern muss. Deshalb weis ich das nicht.
Aber wenn es Dich interessiert: Der Souce der JVM ist frei, schau nach.

bye
TT


----------



## Ofof91 (6. Jan 2013)

Auch die indexOf-Methode funktioniert. 

Ich hoffe nur, dass ich es richtig verstanden habe. Zur Sicherheit gebe ich noch ein Beispiel an, welches ich ausprobiert habe.

"Helnice".indexOf("nice")

Laut Angabe soll die Methode "-1" liefern, wenn der Substring nicht gefunden wurde. Hier wird er gefunden, und liefern tut er "3". 

Stimmt das so?


----------



## Ofof91 (6. Jan 2013)

//eliminate all leading and tailing white-spaces of the string; returns the number of white-spaces eliminated

public int trim()
{}
*
Diese Methode fehlt mir noch, ich weiß aber nicht was " leading and tailing white-spaces" sind? *


----------



## Gast2 (6. Jan 2013)

Du solltst alle white-spaces vorne und hinten eliminieren:
"     hallo     du da    " => "hallo     du da"


----------



## Ofof91 (6. Jan 2013)

EikeB hat gesagt.:


> Du solltst alle white-spaces vorne und hinten eliminieren:
> "     hallo     du da    " => "hallo     du da"




Also alle Leerzeichen?


----------



## Gast2 (6. Jan 2013)

Nein, alle white spaces, das ist ein Unterschied. Google doch solche Sachen bitte selbstständig nach...

Whitespace character - Wikipedia, the free encyclopedia


----------

