Fehlermeldungen

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

Fehlermeldungen

Beitrag von Johnny »

Ich bin in einer Montaggruppe im Poolraum, und da ich Montag morgen und vormittag zwei weitere Kurse habe, bleibt mir nicht viel Zeit zur Bearbeitung bis zum Poolraumtermin, also werde ich mehr Feedback brauchen, und ich hoffe, dass ich ihn mit diesen Forum bekommen kann. Ich richte jetzt dieses Thema ein, um eine Antwort zu kriegen für die allerlei Fehlermeldungen mit denen ich mich konfrontiere.

Bei Übung 3, Aufgabe 1, für die main-Methode habe ich eine Methode eingestellt, die das Array von Strings in einen einzigen String umwandelt, und in der zweiten Methode benutze ich folgenden Code, um jedes der Buchstaben einzeln aufzuzahlen, und ihre Anzahl in einem Array zu speichern:

Code: Alles auswählen

public static int[] count(String text) {
        int[] a=new int [26];
        for(int i=0; i<text.length(); i++) {
            char p=text.charAt(i);
            int r=(int) p;
            int [p-65] a +=1;
        }
    return int[] a;
}
Wenn ich versuche, die Klasse zu kompilieren, bekomme ich eine Fehlermeldung, laut der ein J in der eckigen Klammer, vor p-65, erwartet wird. Als Hinweis wird mir empfohlen, zu versuchen zu verstehen, warum diese Fehlermeldung erscheint. Vielleicht liegt es an einem Fehler aus der vorherigen Methode, müsste ich irgendwelche andere Indizes benutzen, brauche ich weitere Indizes zu definieren?
Zuletzt geändert von mmec am 2. Mai 2012 14:34, insgesamt 1-mal geändert.
Grund: [code][/code]
It is only when we lose everything that we are free to do anything

Benutzeravatar
mmec
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 203
Registriert: 7. Sep 2011 17:59
Wohnort: Darmstadt

Re: Fehlermeldungen

Beitrag von mmec »

Hallo Johnny,

Code: Alles auswählen

int [p-65] a +=1;
Das sieht ja irgendwie aus wie eine Deklaration, da du int vor die Klammern schreibst, aber du willst dein Array ja nicht nochmal deklarieren. Und dass +=1 würde dann auch keinen Sinn ergeben.
Was du dort eigentlich machen möchtest ist glaube ich folgendes:

Code: Alles auswählen

a[p-65] +=1;
Damit erhöhst du das Element an der Stelle p-65 im Array a um 1.

Außerdem ist folgende Zeile redundant, weil du r nie wieder benutzt:

Code: Alles auswählen

int r=(int) p;

Code: Alles auswählen

return int[] a;
In der Zeile deklarierst du ein Array mit dem Namen a und gibst es zurück. Das Array a existiert aber schon, also ist das int[] fehl am Platz.

Grüße, Johannes
FC SEEMOO No.1

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

Re: Fehlermeldungen

Beitrag von Johnny »

Nach einer länglichen Nacht habe ich endlich einen Code, der beim Kompilieren keine Fehlermeldungen abgibt:

Code: Alles auswählen

  public static void main(String[] args) {
      String text="";
      String empty="";
      for(int i=0; i<args.length; i++) {
        empty=empty + args[i];
      }
      String buffer="";
      for(int i=0; i<empty.length(); i++) {
        char c1=empty.charAt(i);
        int c2=(int) c1;
        if ((97<=c2&c2<=122)|(65<=c2&c2<=90)) {
            buffer=buffer + c1;
        }
    }
      text=text + buffer.toUpperCase();
}
   /*
    * @param: String
    * @return: Array
    */
   public static int[] count(String text) {
        int[] a=new int [26];
        for(int i=0; i<text.length(); i++) {
            char p=text.charAt(i);
            int r=(int) p;
             a[r-65] +=1;
        }
    return a;
}
    /*
     * @param: Array
     * @return: Gedruckter Text
     */
    public static void print(int[] a){
        for(int i=0; i<a.length; i++) {
            if(a[i]>0) {
                System.out.println((char) (i+65) + ":" + a[i]);
            }
        }
    }
Nun, wenn ich es durchführe, bekomme ich keine Abgabe. Ich kann ein String-Array problemlos in der main Methode einfügen, aber danach passiert nichts sichtbares. Brauche ich mehr Bezug zwischen den verschiedenen Teilen des Codes? Muss die main Methode wirklich void sein?
Zuletzt geändert von Owyn am 3. Mai 2012 09:58, insgesamt 1-mal geändert.
Grund: [code][/code]
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: Fehlermeldungen

Beitrag von Owyn »

Hallo,

mit der Variable text aus der Main-Methode passiert bei Ihnen ja nichts - Sie müssen noch die Methode count aufrufen und mit deren Rückgabewert die Methode print.

Sie können übrigens direkt mit chars rechnen: "a[p - 'A'] += 1;" in count funktioniert auch. Dann muss man sich keine ASCII-Codes merken.
Und in der main-Methode reicht es eigentlich, wenn Sie die einzelnen args-Elemente aneinander hängen. Ihre Überprüfung, ob es sich um gültige Zeichen handelt, ist quasi schon eine Bonusaufgabe (und natürlich auch wieder mit ('A' <= c1 && c1 <= 'Z' ) möglich). Wenn Sie den String zuerst in Großbuchstaben umwandeln, sparen Sie sich dabei auch die Überprüfung der Kleinbuchstaben.

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: Fehlermeldungen

Beitrag von Johnny »

bei den chars will ich nichts mehr verändern, ich habe ein funktionelles system gefunden, und ändere es nicht. Wie soll ich aber eine Methode innerhalb einer anderen Methode aufrufen?
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: Fehlermeldungen

Beitrag von Melkom »

Johnny hat geschrieben:Wie soll ich aber eine Methode innerhalb einer anderen Methode aufrufen?
Indem Sie einfach z.B. count(empty) schreiben. Das Ergebnis müssen Sie sich allerdings noch irgendwo merken.

Methodenaufrufe innerhalb von anderen Methoden haben Sie ja schon gemacht, z.B. rufen Sie in der Zeile

Code: Alles auswählen

char p=text.charAt(i);
die Methode charAt(...) auf.

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

Re: Fehlermeldungen

Beitrag von Johnny »

Vielleicht habe ich es nicht am richtigen Ort aufgeschrieben, weil jetzt wenn ich die main-Methode aufrufe, bekomme ich "Error: "}" expected", obwohl ich den String-Array in geschweifte Klammer platziert habe. Ich habe auch früher Ergebnisplatzierungen versucht, nämlich mit return(ich kenne nichts anderes), und BlueJ meldet, das es nicht klappt. Ich werde bald nervenkrank.
It is only when we lose everything that we are free to do anything

snejjj
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 26. Okt 2011 11:21

Re: Fehlermeldungen

Beitrag von snejjj »

Bis jetzt endet deine Main-Methode (und damit auch dein Programm) damit, dass du den endgültigen Text in Großbuchstaben überträgst.
Jetzt musst du ja noch die Zählung und Ausgabe aufrufen.

Methoden in methoden aufrufen gabs doch in AI1 auch schon. Zum Beispiel beim TreppenSteiger. da wurden in der Methode climbStair() auch die Methoden move() und turnLeft() aufgerufen.
Die main-Methode ist quasi mehr oder weniger äquivalent zum task-Block in KarelJ. Was da nicht aufgerufen wird, wird auch nicht ausgeführt.

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

Re: Fehlermeldungen

Beitrag von Johnny »

Übung 4, Aufgabe 2

Ich habe den Konstruktor wie folgt definiert:

Code: Alles auswählen

public Rectangle(int x, int y, int breit, int hoch) {
this.x=x;
this.y=y;
this.width=breit;
this.height=hoch;
}
Beim Kompilieren entsteht ein roter Kasten um .x und die folgende Botschaft: cannot find symbol - variable x. Wer kann mir ne Antwort geben?
Zuletzt geändert von mmec am 11. Mai 2012 16: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: Fehlermeldungen

Beitrag von Melkom »

Johnny hat geschrieben:Beim Kompilieren entsteht ein roter Kasten um .x und die folgende Botschaft: cannot find symbol - variable x. Wer kann mir ne Antwort geben?
Haben Sie eine Objektvariable x deklariert?

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

Re: Fehlermeldungen

Beitrag von Owyn »

Hey, das wollte ich auch gerade schreiben!

Schlagen Sie in den Folien oder im Skript noch mal "Objektvariablen" nach...

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: Fehlermeldungen

Beitrag von Johnny »

Ich habe gesucht, und ich verstehe noch immer nicht. In dem Fall ist x ein Parameter des Konstruktors, also wird er beim Aufruf der Methode definiert. Warum bekomme ich diese Fehlermeldung, wie misshandle ich diese Datei, so dass ich diese Fehlermeldung bekomme?
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: Fehlermeldungen

Beitrag von Owyn »

Sie haben zwar einen Parameter x, auf den Sie mit "x" zugreifen, aber keine Objektvariable x, auf die Sie mit "this.x" zugreifen.

Und was eine Objektvariable ist, setzten wir als bekannt voraus. Folien und Skript helfen.

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: Fehlermeldungen

Beitrag von Johnny »

Wo definiere ich dann die Objektvariable? Und warum soll ich hier eine Objektvariable definieren? In Übung 2, Aufgabe 1, brauchte ich keine Objektvariable zu definieren für den eingegebenen String, wieso ist die Situation hier verschieden?
It is only when we lose everything that we are free to do anything

Benutzeravatar
mmec
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 203
Registriert: 7. Sep 2011 17:59
Wohnort: Darmstadt

Re: Fehlermeldungen

Beitrag von mmec »

Hallo Johnny,

Code: Alles auswählen

class Rectangle{
    private int x,y,breit,hoch;
    public Rectangle(int x, int y, int breit, int hoch) {
        this.x=x;
        this.y=y;
        this.width=breit;
        this.height=hoch;
    }
}
So müsste das aussehen, da du mit this.x die Objektvariable ansprichst. Deklarierst du diese Variable nicht im Klasserumpf, existiert auch keine Objektvariable mit dem Namen x.

Grüße, Johannes
FC SEEMOO No.1

Antworten

Zurück zu „Archiv“