Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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);
}
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?
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.
//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 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.
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
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.