Übung 7 Aufgabe 2

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Übung 7 Aufgabe 2

Beitrag von Johnny » 1. Jun 2012 16:49

Mein Code sieht folgendermaßen aus:

Code: Alles auswählen

public static boolean palindrom(String txt) {
        txt.trim();
        txt.toUpperCase();
        if (txt.length()==1) return true;
        else for(int i=0; i<txt.length()/2; i++) {
             if (txt.charAt(i)=txt.charAt(txt.length()-i)) substring(i, txt.length-i);
             else return false;
        }
        return true;
}
Der rote Quader erscheint um i von txt.charAt(i), laut der Fehlermeldung füge ich einen Wert statt einer Variable ein. Woran liegt mein Fehler?
Zuletzt geändert von Daniel S. am 1. Jun 2012 17:12, insgesamt 1-mal geändert.
Grund: Code Tags
It is only when we lose everything that we are free to do anything

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Übung 7 Aufgabe 2

Beitrag von Daniel S. » 1. Jun 2012 17:14

In dieser if-Bedingung versuchst du eine Zuweisung zu machen, anstelle eines Vergleiches.
Du hast auch noch Semantik-Fehler, die du erst zur Laufzeit beim Testen finden wirst.

Edit: Die Aufgabe sieht übrigens vor, das Problem rekursiv zu lösen, also ohne Schleife.
Mit freundlichen Grüßen
Daniel

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Re: Übung 7 Aufgabe 2

Beitrag von Johnny » 1. Jun 2012 17:37

Wahrscheinlich liegt es an der Semantik, weil ich habe dieses Problem gelöst, dann habe ich eine Durchführung versucht ohne die substring-Methode, und mein Code funktioniert nicht. BlueJ kann mir nicht sagen, was ich falsch mache, jedoch wird dieselbe Zeile wie früher gelb, und die folgende Ausgabe wird gegeben:

java.lang.StringIndexOutOfBoundsException:
String index out of range: 4 (in java.lang.String)

Ist mein String zu kurz? Und wenn ja, warum ist die Länge des Strings ein Einfluss auf mein Code?
It is only when we lose everything that we are free to do anything

Melkom
Mausschubser
Mausschubser
Beiträge: 89
Registriert: 21. Okt 2005 13:58
Wohnort: Frankfurt am Main

Re: Übung 7 Aufgabe 2

Beitrag von Melkom » 1. Jun 2012 19:20

Johnny hat geschrieben:Ist mein String zu kurz? Und wenn ja, warum ist die Länge des Strings ein Einfluss auf mein Code?
Entweder das, oder der Index ist zu groß... Auf jeden Fall liegt der Index außerhalb des Strings. Die Länge hat keinen Einfluss auf den Code, wohl aber auf die Ausführung.

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Re: Übung 7 Aufgabe 2

Beitrag von Johnny » 1. Jun 2012 19:38

Leute, ich danke euch für eure Unterstützung, ihr seid wirklich klasse, aber leider brauche ich sie immer, und diesmal ist es verdammt komisch: Mein Code für die ganze Klasse Words sieht so aus:

Code: Alles auswählen

public class Words
{
   /*
    * @param: Einen String
    * @return: Ob der String ein Palindrom ist
    */
   public static boolean palindrom(String txt) {
       int c=0; 
       String t1=txt.trim();
       String t2=t1.toUpperCase();
        if (t2.length()==1) return true;
        else{ for (int i=0; i<t2.length()/2; i++) {
                if(t2.charAt(i)==t2.charAt(t2.length())) {
                c=c+1;
                continue;
            }
                else if(t2.charAt(i)!=t2.charAt(t2.length()-i)) break;
            } 
            if (c==t2.length()/2 - 1) return true;
            else return false; 
    }
}

    /*
     * @param: 2 Strings
     * @return: Ob die 2 Annagramme voneinander sind
     */
     

    public static boolean anagramm(String t1, String t2) {
        String t3=t1.trim();
        String t4=t2.trim();
        String t5=t1.toUpperCase();
        String t6=t2.toUpperCase();
        if(t5.length()==t6.length()) {
            for(int i=0; i<t5.length(); i++) {
            char c1=t5.charAt(i);
            int c2=t6.indexOf(c1);            
        }
        return true;
    }
}
}
Beim Kompilieren wird der ganze Bildschirm rot, und ich bekomme diese Fehlermeldung von der ganzen Klasse: missing return statement. Warum bekoome ich diese Fehlermeldung von der ganzen Klasse, nicht nur eine Methode? Und außerdem weiß ich nicht mehr, wie ich an der Methode palindrom weitermachen soll.
Zuletzt geändert von Owyn am 2. Jun 2012 13:05, insgesamt 1-mal geändert.
Grund: [code][/code]
It is only when we lose everything that we are free to do anything

Melkom
Mausschubser
Mausschubser
Beiträge: 89
Registriert: 21. Okt 2005 13:58
Wohnort: Frankfurt am Main

Re: Übung 7 Aufgabe 2

Beitrag von Melkom » 1. Jun 2012 19:58

Johnny hat geschrieben: Beim Kompilieren wird der ganze Bildschirm rot, und ich bekomme diese Fehlermeldung von der ganzen Klasse: missing return statement. Warum bekoome ich diese Fehlermeldung von der ganzen Klasse, nicht nur eine Methode? Und außerdem weiß ich nicht mehr, wie ich an der Methode palindrom weitermachen soll.
Wenn eine Methode einen Fehler enthält, enthält auch die Klasse einen Fehler. Der Fehler tritt auf, weil die Methode nicht immer einen Wert zurückgibt, sondern nur dann wenn die Bedingung (t5.length()==t6.length()) erfüllt ist. Überlegen Sie sich, was die Methode machen soll, wenn diese Bedingung nicht erfüllt wird. Was machen Sie mit der Variable c2? Hilft Ihnen diese Variable nicht bei der Problemlösung?

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Re: Übung 7 Aufgabe 2

Beitrag von Johnny » 1. Jun 2012 21:39

Mein Gedanke damit war, dass, falls c2 keinen Wert annehmen kann(das würde bedeuten, dass c1 nicht in t6 vorkommt), würde die Methode false zurückliefern. Ich bin aber nicht sicher, was für eine Methode ich brauche, um das zu schaffen.
It is only when we lose everything that we are free to do anything

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Übung 7 Aufgabe 2

Beitrag von Owyn » 2. Jun 2012 13:28

Zuerst zur Methode palindrom:

- Das zweite else hat kein zugehöriges if, das gibt natürlich einen Fehler.
- In Ihrer Schleife vergleichen Sie das i-te Element immer mit "dem hinter dem letzten", nicht mit dem letzten, dann dem vorletzten, dann dem vorvorletzten usw.
- break und continue sind oft schlechte Ideen
- die Methode soll völlig ohne Schleifen geschrieben werden, sondern rekursiv funktionieren!
Dazu teilen Sie die Fragestellung (Ist ein String x ein Palindrom?) sinnvoll auf: Wenn x nur ein Zeichen lang ist, ist es sicher ein Palindrom. Wenn erster und letzter Buchstabe ungleich ist, ist x sicher kein Palindrom. Ansonsten stellen Sie die selbe Frage noch mal (rekursiver Aufruf!), nachdem Sie den ersten und letzten Buchstaben (die ja gleich sind) abschneiden.

Und zur Methode anagramm:

- Von Ihrer Methode wird niemals false zurückgeliefert. Irgendwo fehlt also mit Sicherheit ein "return false;".
- Auch hier soll die Aufgabe rekursiv gelöst werden - also ohne jede Schleife. In der Aufgabenstellung ist Schritt für Schritt beschrieben, welche Fälle auftreten können und wie sie behandelt werden.
Zuerst werden die Rekursionsanker abgedeckt, also die Fälle, die direkt sicher mit true oder false beantwortet werden können (Leerer String? Erster Buchstabe von t1 taucht in t2 nicht auf? etc.).
Anschließend wird der erste Buchstabe von t1 sowohl aus t1 als auch aus t2 entfernt und die Funktion rekursiv aufgerufen.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Re: Übung 7 Aufgabe 2

Beitrag von Johnny » 2. Jun 2012 20:09

Wie kann ich Fallunterscheidungen machen ohne zB if zu benutzen? Die Methode Fakultaet, mit der Rekursivität in der Vorlesung gezeigt wurde, hatte eine if-Schleife. Und wie heißt die Methode, die einen Zeichen aus einem String eliminiert? Mache ich etwas mit doppelter Anwendung von substring, das ist der Gedanke?
It is only when we lose everything that we are free to do anything

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Übung 7 Aufgabe 2

Beitrag von Owyn » 2. Jun 2012 20:20

if ist eine Bedingung, keine Schleife - natürlich dürfen Sie if verwenden!

Für jede Verwendung des Begriffs "if-Schleife" werden in der Klausur 500 Punkte abgezogen.

Und ja: Um ein Zeichen aus einem String zu entfernen, können Sie zweimal substring benutzen.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Re: Übung 7 Aufgabe 2

Beitrag von Johnny » 2. Jun 2012 21:44

Ich habe meinen Code entsprechend der Empfehlungen verändert, nämlich so:

public static boolean palindrom(String txt) {
String t1=txt.trim();
String t2=t1.toUpperCase();
if (t2.length()==1) return true;
else if(t2.charAt(0)==t2.charAt(t2.length()-1)) palindrom(txt.substring(1, t2.length()-2));
else if(t2.charAt(0)!=t2.charAt(t2.length()-1)) return false;
}

und laut BlueJ habe ich kein return statement, obwohl ich 2 sehe. Was gibts?
It is only when we lose everything that we are free to do anything

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Übung 7 Aufgabe 2

Beitrag von Owyn » 2. Jun 2012 21:49

Ihr rekursiver Aufruf soll ja auch einen boolean liefern - was passiert denn mit dem?
Bei Ihnen verschwindet er im Nirvana - Sie könnten den Rückgabewert des rekursiven Aufrufs einfach mittels return zurückgeben, dann wird nämlich auch auf jeden Fall etwas zurückgegeben.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Re: Übung 7 Aufgabe 2

Beitrag von Johnny » 2. Jun 2012 22:32

Meinst du so:

public static boolean palindrom(String txt) {
String t1=txt.trim();
String t2=t1.toUpperCase();
if (t2.length()==1) return true;
else if(t2.charAt(0)==t2.charAt(t2.length()-1)) {
palindrom(t2.substring(1, t2.length()-2));
return palindrom;
}
else if(t2.charAt(0)!=t2.charAt(t2.length()-1)) return false;
}

Die diesmalige Fehlermeldung lautet cannot find symbol - variable palindrom, und einen roten Kasten erscheint am großerscheinenden palindrom.

PS: Ich hoffe dass ich keine Nervensäge bin.
It is only when we lose everything that we are free to do anything

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Übung 7 Aufgabe 2

Beitrag von Owyn » 2. Jun 2012 22:42

Eine Variable namens palindrom kann er natürlich nicht finden, die haben Sie nirgends deklariert.
Aber der komplette Aufruf palindrom(t2.substring(1, t2.length()-2)) hat einen Wert - den können Sie direkt zurückgeben.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Johnny
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 24. Nov 2011 19:28

Re: Übung 7 Aufgabe 2

Beitrag von Johnny » 2. Jun 2012 22:49

hab schon versucht, geht nicht
It is only when we lose everything that we are free to do anything

Antworten

Zurück zu „Archiv“