Methoden Übergebe Variabel funktioniert nicht

Blue_J

Mitglied
Hallo,

ich bin ganze neu hier, aber ich habe ein Problem und habe jetzt schon lange gesucht, finde das Problem nicht.
Ich hoffe ihr könnt mir helfen...
Mein Problem ist folgendes ich habe zwei Klassen : Test und Caesar (ich arbeite in BlueJ)

Der relevante Code von Test lautet:
[code = Java]
public static void caesarOhneS2(String[] args){
// erstellen von caesar Object
// verschluesselterText wird eingespeichert
entschluesselterText = caesar.entschluesseleTextOhneS(verschluesselterText,1);
// ausgeben des entschluesselten Textes
}
[/code]

Der Code von Caesar lautet:
[code = Java]
public String entschluesseleTextOhneS(String text,int zahl)
{
haeufigkeitImText(text); // speichert die haufigkeiten in ein array
ermitteltVerschiebung(WertGeben(zahl)); // ermittelt die verschiebung // erhält den Wert von Wert Geben
return entschluesseleText(text);
}
[/code]

Wenn ich den Text ausgebe, wird anscheinend keine Zahl übergeben, da der verschluesselte Text einfach ausgegeben wird.
Wenn ich den Code in Caesar von WertGeben(zahl) zu WertGeben(1) änder tritt dieses Problem nicht auf.
Was mache ich falsch?

Ich hoffe ich konnte mein Problem verständlich erklären.
Ich will meine obere Methode nich erweitern und brauche deswegen die Übergabe der Variabel.
 
Keine Ahnung von BlueJ. Das funktioniert ja leicht anders, als beim "richtigen" Java 😉

Kannst du denn beim Aufruf der Methode sowohl einen String, als auch eine Zahl als Parameter mit angeben?

Bzw. es steht zwar im Kommentar "erstellen von ceasar Objekt", aber wo wird denn da ein Objekt erstellt?
 
Java:
public static void caesarOhneS2(String[] args){
// erstellen von caesar Object
// verschluesselterText wird eingespeichert
entschluesselterText = caesar.entschluesseleTextOhneS(verschluesselterText,1);
// ausgeben des entschluesselten Textes
}


//Der Code von Caesar lautet:

public String entschluesseleTextOhneS(String text,int zahl)
{
haeufigkeitImText(text); // speichert die haufigkeiten in ein array
ermitteltVerschiebung(WertGeben(zahl)); // ermittelt die verschiebung // erhält den Wert von Wert Geben
return entschluesseleText(text);
}

benutze den Code Block
 
Wenn ich den Text ausgebe, wird anscheinend keine Zahl übergeben, da der verschluesselte Text einfach ausgegeben wird.
Wenn ich den Code in Caesar von WertGeben(zahl) zu WertGeben(1) änder tritt dieses Problem nicht auf.
Was mache ich falsch?
du kannst immer nur einen Variable (DatenTyp) zurückgeben.
du könntest dafür ein String Array benutzen und die Zahl als String auf Index 1 mitgeben.


Woran erkennst du das? Die Methode entschluesseleText() wird doch gar nicht gezeigt. Vielleicht verändert sie ja den Text?
das war falsch weil mann es schlecht lesen konnte
 
Zuletzt bearbeitet:
In Rätseln du sprichst, junger Padawan. Er gibt doch nur eine Variable zurück, nämlich einen String.
Ich habe es so verstanden das er nicht nur den string zurück haben will sondern auch den int. Was ja so einfach nicht geht. Wie wir alle wissen.

Eine Methode kann nur ein Objekt zurückgeben aber mehrere übergeben bekommen.

Für mich läuft seine Frage auf das hinaus.
 
Ich habe es so verstanden das er nicht nur den string zurück haben will sondern auch den int. Was ja so einfach nicht geht. Wie wir alle wissen.

Eine Methode kann nur ein Objekt zurückgeben aber mehrere übergeben bekommen.

Für mich läuft seine Frage auf das hinaus.
Ich denke, es geht darum ermitteltVerschiebung(WertGeben(zahl));

Wenn sie/er anstatt von "zahl" eine 1 schreibt, dann funktioniert es anscheinend.

@Blue_J Kannst du in dieser Methode einfach den Inhalt von "zahl" mal auf der Konsole ausgeben?
 
Danke für eure Hilfe.
Nochmal zu meinem Problem. Hab ich anscheinend nicht gut genug erklärt.
In Caesar in haeufigkeitImText() werden die Häufigsten Buchstaben im übergebenen Text in ein Array gespeichert.
In ermitteltVerschiebung() berecht die Methode die Differenz zwischen e und dem häufigsten Buchstaben im Text.
Dazu ruft ich die Methode WertGeben() auf, die den häufigsten Buchstaben, wenn ich 1 übergebe zurückgibt.

Java:
public int WertGeben(int wert)
    {
        if(wert == 1)
            return hoestwerte[0][1];
        else if(wert == 2)
            return hoestwerte[1][1];
        else if(wert == 3)
            return hoestwerte[2][1];
        else
            return -1;
    }

//Tut mir leid, hab jetzt erst herausgefunden, wie man Java-Code richtig einfügt.

Wenn ich oben in caesar der Methode einfach eins übergebe, dann wird der Text entschlüsselt.
Wenn ich aber die Zahl (1) durch die Klasse Test übergebe und dann damit die Methode Wert Gebe aufrufe, wird der Text nicht entschlüsselt.

Kannst du in dieser Methode einfach den Inhalt von "zahl" mal auf der Konsole ausgeben?
Wenn ich zahl durch die Klasse Test übergebe gibt die Konsole 0 aus.
 
Wenn Du so eine Methode hast und da nicht das gewünschte Ergebnis raus kommt, dann solltest Du einmal schauen:
a) Was ist der Parameter?
b) Was ist der Inhalt von hoestwerte? Wurde das Array richtig gefüllt?

Was mir z.B. auffällt ist die Namensgebung. WertGeben ist ein Methodenname, der einfach nichts aussagt. Die Methode gibt ein int zurück und damit einen Wert. Was genau macht die Methode? Was ist die Bedeutung dahinter? Parameter ist wert. Es wird ein Wert übergeben. Aber das besagt nichts aus. Wert ist hier ja in der Bedeutung Zahl. (Im Gegensatz zu einem Auto - da wäre Wert ja, wieviel Geld das Auto noch wert wäre ... da hätte es einen Sinn). Natürlich muss da eine Zahl übergeben werden, denn das ist ja ein int. Und auch der Kommentar ist genau so verwirrend: "erhält den Wert von Wert Geben"

Dadurch wird es extrem schwer, den Sinn zu verstehen und es macht es somit deutlich leichter, Fehler einzubauen, die dann nicht trivial zu entdecken sind.

Aber wie gesagt: wenn da ein falscher Wert zurück kommt, dann wird es entweder daran liegen, dass Du das falsche Feld ausliest oder eben dass die Felder falsch gefüllt wurden.
 
seit jahrezenten ist system.out.println das eifnachste debug tool das es gefühlt gibt... nimms her

wenn du blödsinn als ergebnis bekommst dann schau dir an was in den werten drin steht
 
Wie oben schon geschrieben, habe ich keine Ahnung von BlueJ.

Kannst du den Code der gesamten Klasse zeigen und auch die Testklasse, die das aufruft?

Ich meine gehört zu haben, dass in BlueJ Methoden direkt gestartet werden können, also etwas anders, als in "reinem" Java (wo das Prgramm über die main() Methode gestartet wird), darum ist mir nicht ganz klar, wie deine Codeschnipsel von oben aufgerufen werden.
 
Wenn Du so eine Methode hast und da nicht das gewünschte Ergebnis raus kommt, dann solltest Du einmal schauen:
a) Was ist der Parameter?
b) Was ist der Inhalt von hoestwerte? Wurde das Array richtig gefüllt?
Als erstes habe ich den Namen jetzt geändert von WertGeben() in häufigsterBuchstabeAlsZahlGeben()
(hatte den Namen deswegen gekürzt weil mir dieser zu lang erscheint, aber ja man muss die Methoden aussagekräftig benennen )

b) Ja wie oben erwähnt wird das Array richtig gefüllt nur bei dem Aufruf scheitert es.

seit jahrezenten ist system.out.println das eifnachste debug tool das es gefühlt gibt... nimms her

wenn du blödsinn als ergebnis bekommst dann schau dir an was in den werten drin steht
Was meinst du damit ? Ich habe mir die zahl ausgeben lassen und da steht 0 drin, weiß nur nicht warum ...
 
Hallo Leute,
das Problem hat sich von selbst geklärt, auf unverständliche Weise wird die Methode nun richtig ausgeführt. (Ich habe nichts geändert außer den Namen)
Ich weiß nicht warum, vielleicht hatte sich BlueJ aufgehängt.🙄

Danke, dass ihr mir versucht habt zu helfen.
Tut mir echt leid, dass ich mich so unverständlich ausgedrückt habe.
Wenn ich wieder eine Frage haben sollte, versucht ich mich genauer auszudrücken.
 
warum nimmst du eig bluej ansich überhaupt her?

lernst du erst?
schule zwang?

bluej ist ganz flauschig für den anfang aber es muss nicht sein
 

Zurück
Oben