Methode akzeptiert String nicht

triade

Aktives Mitglied
Hallo, bei der ausführung des codes wird mir gesagt das diese methode string nicht anwenden kann.(solang ich das richtig verstanden hab)
Fehlermeldung: The method shiftAlphabet(String, int) in the type CeaserVerschluesselung is not applicable for the arguments (String)
Weiß wer woran das hagt?

Java:
public static String shiftAlphabet(String zvtext, int va)
    {
        String vtext = "";
        for (int i = 0;i < zvtext.length();i++ ) {
            char c = zvtext.charAt(i);
            if (Character.isLetter(c)) {
                if (Character.isUpperCase(c)) {
                    c = (char) (((c - 'A' + va) % 26) + 'A');
                } else {
                    c = (char) (((c - 'a' + va) % 26) + 'a');
                }
            }
            output += c;
        }
        return output;
    }
 
Wenn die Methode zwei Parameter benötigt, dann solltest Du beim Aufruf auch zwei Parameter angeben. Diese Methode verlangt noch einen int Wert als zweiten Parameter, also solltest Du beim Aufruf noch einen int Wert als zweiten Parameter angeben.
ich bestimme vor der Methode die Parameter va (int) und zvtext (String) sonst wird nichts in der Methode verwendet das ich dafür bestimmt habe das was die Methode nutzt wird erst in der Methode bestimme muss ich das dennoch da eintragen? Hier wäre int i oder was muss ich da als zusätzlichen Parameter angeben?
 
ich bestimme vor der Methode die Parameter va (int) und zvtext (String) sonst wird nichts in der Methode verwendet das ich dafür bestimmt habe das was die Methode nutzt wird erst in der Methode bestimme muss ich das dennoch da eintragen? Hier wäre int i oder was muss ich da als zusätzlichen Parameter angeben?
Die Fehlermeldung besagt, dass Du beim Aufruf der Methode nur einen Parameter übergibst.
Zeig mal die Zeile, in der Du
Java:
shiftAlphabet
aufrufst, und vielleicht ein paar Zeilen davor.
 
Also wer hat den die Funktion
Java:
public static String shiftAlphabet(String zvtext, int va)
geschrieben???

Was man vorher macht ist vollkommen unerheblich. Denn diese Methode sagt "gib mir ein String (zvtext) und eine Zahl (va) und ich gebe dir einen String zurück. Hier soll eine affine Transformation des der Eingabe zvtext um va zeichen verschoben werden. (Cäser Shifre).

Du rufst die Methode so auf:

shiftAlphabet("Das ist ein Text, der verschlüsselt werden soll", 10)

Alles andere ist falsch.
 
Also wer hat den die Funktion
Java:
public static String shiftAlphabet(String zvtext, int va)
geschrieben???

Was man vorher macht ist vollkommen unerheblich. Denn diese Methode sagt "gib mir ein String (zvtext) und eine Zahl (va) und ich gebe dir einen String zurück. Hier soll eine affine Transformation des der Eingabe zvtext um va zeichen verschoben werden. (Cäser Shifre).

Du rufst die Methode so auf:

shiftAlphabet("Das ist ein Text, der verschlüsselt werden soll", 10)

Alles andere ist falsch.
So habe ich den code ja trotzdem wir mir die Fehlermeldung " The method shiftAlphabet(String, int) in the type CeaserVerschluesselung is not applicable for the arguments (String)" Ausgegeben.
 
Die Fehlermeldung besagt, dass Du beim Aufruf der Methode nur einen Parameter übergibst.
Zeig mal die Zeile, in der Du
Java:
shiftAlphabet
aufrufst, und vielleicht ein paar Zeilen davor.
Das ist mein gesammter code, bei der bestimmung von vtext hatte hinten was gefehlt allerdings wird mir jetzt diese Fehlermeldung angezeigt "
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
output cannot be resolved to a variable



at CeaserVerschluesselung.main(CeaserVerschluesselung.java:13)
"

Java:
import java.util.Scanner;

public class CeaserVerschluesselung
{
    public static void main(String[] args)
    {
        Scanner zeta = new Scanner(System.in);

        System.out.println("Hallo. ich verschlüssele für sie einen Text nach der Ceaserverschlüsselung."+"\n"+"Geben Sie dafür erstmal an um wie viele stellen dies verschlüsselt werden sol, anschliesend ihren zu verschlüssenden Text.");
        int va = zeta.nextInt();
        String zvtext = zeta.nextLine();

        String  vtext = shiftAlphabet(zvtext);

        System.out.println("Der verschlüsselte Text lautet:");
        System.out.println(vtext, int);
    }
    public static String shiftAlphabet(String zvtext, int va)
    {
        String vtext = "";
        for (int i = 0;i < zvtext.length();i++ ) {
            char c = zvtext.charAt(i);
            if (Character.isLetter(c)) {
                if (Character.isUpperCase(c)) {
                    c = (char) (((c - 'A' + va) % 26) + 'A');
                } else {
                    c = (char) (((c - 'a' + va) % 26) + 'a');
                }
            }
            vtext += c;
        }
        return vtext;
    }

}
 
Zuletzt bearbeitet:
Also der Code der es verschlüsseln soll klappt jetzt allerdings der Code der es entverschlüsseln soll klappt in maßen und zwar da wird mir keine Fehlermeldung angezeigt allerdings spuckt der Code nur ?? aus weiß wer woran das liegt?

Java:
import java.util.Scanner;

public class CeaserEntverschluesselung
{
    public static void main(String[] args)
    {
        Scanner zeta = new Scanner(System.in);

        System.out.println("Hallo. ich entverschlüssele für sie einen Text nach der Ceaserverschlüsselung."+"\n"+"Geben Sie dafür erstmal an um wie viele stellen dies entverschlüsselt werden soll, anschliesend ihren zu entverschlüssenden Text.");
        int va = zeta.nextInt();
        String vtext = zeta.nextLine();

        String  evtext = shiftAlphabet(vtext, va);

        System.out.println("Der verschlüsselte Text lautet:");
        System.out.println(evtext);
    }
    public static String shiftAlphabet(String vtext, int va)
    {
        String evtext = "";
        for (int i = 0;i < vtext.length();i++ ) {
            char c = vtext.charAt(i);
            if (Character.isLetter(c)) {
                if (Character.isUpperCase(c)) {
                    c = (char) (((c + 'A' + va) % 26) - 'A');
                } else {
                    c = (char) (((c + 'a' + va) % 26) - 'a');
                }
            }
            evtext += c;
        }
        return evtext;
    }

}
 
Dann wäre es doch super, wenn du deine Lösung hier posten würdest. Dann hätten andere auch was davon.
Hier ist der Fertige code und eine kleine erklärung zu dem. Der code führt für einen die ceaserverschlüsselung durch. Undzwar fragt er einen nach einer zahl und verschlüsselt dan den text danach. indem er alle Bustaben um so viele stellen verrückt wie man es am anfang angegeben hat. (umlaute und ß klappen nicht)

Code:
import java.util.Scanner;

public class CeaserVerschluesselung
{
    public static void main(String[] args)
    {
        Scanner zeta = new Scanner(System.in);

        System.out.println("Hallo. ich verschlüssele für sie einen Text nach der Ceaserverschlüsselung."+"\n"+"Geben Sie dafür erstmal an um wie viele stellen dies verschlüsselt werden sol, anschliesend ihren zu verschlüssenden Text.");
        int va = zeta.nextInt();
        String zvtext = zeta.nextLine();

        String  vtext = shiftAlphabet(zvtext, va);

        System.out.println("Der verschlüsselte Text lautet:");
        System.out.println(vtext);
    }
    public static String shiftAlphabet(String zvtext, int va)
    {
        String vtext = "";
        for (int i = 0;i < zvtext.length();i++ ) {
            char c = zvtext.charAt(i);
            if (Character.isLetter(c)) {
                if (Character.isUpperCase(c)) {
                    c = (char) (((c - 'A' + va) % 26) + 'A');
                } else {
                    c = (char) (((c - 'a' + va) % 26) + 'a');
                }
            }
            vtext += c;
        }
        return vtext;
    }

}
 
Nein, ganz offensichtlich nicht. Kannst Du in Worten beschreiben, wie Du das Verschlüsseln genau machst? Und dann in Worten genau beschreiben, wie das entschlüsseln geht.

Also nicht nur in einem Satz das Verschieben erklären, sondern die Berechnung erläutern, was da wieso gemacht wird.
 
Nein, ganz offensichtlich nicht. Kannst Du in Worten beschreiben, wie Du das Verschlüsseln genau machst? Und dann in Worten genau beschreiben, wie das entschlüsseln geht.

Also nicht nur in einem Satz das Verschieben erklären, sondern die Berechnung erläutern, was da wieso gemacht wird.
Erlich gesagt kann ich dir leider nicht alles 100% erklären, da ich noch relativ neu bin und wir der Schule wir gerade noch bei variabeln sind und da ich aber lust hatte etwas anderes zu tuen (aber leider meine kentnissse noch längst nicht so weit sind.) hab ich eben im internet irgentwo eben diese Methode shiftAlphabet gefunden, diese dann zu dem anderen teil hinzugefügt und dann so an ihr gespielt das sie klappt. Paar sachen hab ich mir angesehen und verstehe diese ein paar wenige sind da die versuche ich zu verstehen, habe allerdings gerade nd so viel zeit und Leider kenn ich keine Seite wo man sachen gut nachlesen kann. Das Java forum ist top für fragen allerdings hier etwas zu suchen und es dann auch zu finden ist chaotisch, sonnst kenne ich noch w3schools aber auch da sachen zu suchen das checke ich nd so genau. Links bei der Leiste ist auch leider nd besonders viel beinhaltet (was wahrscheinlich so gedacht ist damit es überschaulicher ist). Falls Du eine Seite kennst wo man eben solche sachen besser nachschlagen kann wäre ich dir sehr dankbar. und zu der umrechnung habe einfach für va bestimmt das die zahl wo es umgerechnet werden soll von 26 abgezogen werden soll, dann wird zwar noch vorne verschoben kommt aber auf das gleiche wie wenns man nach hinten verschiebt.
 
Erlich gesagt kann ich dir leider nicht alles 100% erklären, da ich noch relativ neu bin und wir der Schule wir gerade noch bei variabeln sind und da ich aber lust hatte etwas anderes zu tuen (aber leider meine kentnissse noch längst nicht so weit sind.)
Also ich stelle schon mal fest: Du hast bock. Das ist die Grundvoraussetzung, um das Handwerk hier zu lernen.

hab ich eben im internet irgentwo eben diese Methode shiftAlphabet gefunden, diese dann zu dem anderen teil hinzugefügt und dann so an ihr gespielt das sie klappt.

Ja.. Hier geht der bock aber in eine falsche Richtung. Klar später kann man sich Snippets aus Internet nehmen und diese ungelesen in seinen Quellcode dampfen.

Statt das von Anfang an richtig zu lernen - was du ja willst - copy pastest du Quellcode, den du nicht verstehst.

- Das Forum kann konkrete Fragen zu einem konkreten Sachverhalt erläutern. Dazu musst du konkrete Fragen stellen. "Das funktioniert nicht" ist KEINE konkrete Frage, daher bekommstu du keine Antworten.

habe allerdings gerade nd so viel zeit und Leider kenn ich keine Seite wo man sachen gut nachlesen kann

- Zum Glück haben wir ja Zeit, um deine Fragen zu beantworten und das für dich zu entwickeln. Du kannst dir denken, in welche Richtung das geht. Entweder man hat bock und investiert Zeit oder nicht.

Ja, schade, dass man im Internet nicht suchen kann. Man kann hier auch nicht Fragen oder einen Thread suchen "Wie fange ich mit Entwickeln an".

Auf keinen Fall kommt man an Bücher ran - Und mal erhlich für die Schule kann es irgendein Buch sein. Um das Wissen zu vermitteln, dass du hier brauchst, sind die ersten 4 Kapitel eines beliebigen Buchen möglich.

Ohh Sorry: Oder die ersten 4 Videos auf Youtube.

Falls Du eine Seite kennst wo man eben solche sachen besser nachschlagen kann wäre ich dir sehr dankbar

Das ist eine geheime Seite, die kann man nur kennen, wenn jemand dazu ein Link postet.

und zu der umrechnung habe einfach für va bestimmt das die zahl wo es umgerechnet werden soll von 26 abgezogen werden soll, dann wird zwar noch vorne verschoben kommt aber auf das gleiche wie wenns man nach hinten verschiebt.

Ansonsten werden irgendwelche Zahlen in irgendwelche Richtungen geschoben. Das ist korrekt. Das kann man so implementieren.

Mit + schiebt man nach rechts.
Mit - schiebt man nach links.

Dazu gehört noch viel viel mehr. Daher schlage ich vor, dass du an dieser Stelle das Posting von @KonradN genau liest und das tust, was dort steht.
 
Das Buch Java ist auch eine Insel ist ein super Nachschlagewerk. Es ist aber weniger geeignet, um sich Java selbst bei zu bringen. Da wäre ein Buch wie "Java von Kopf bis Fuss" besser geeignet.

Dann geht nichts über Praxis. Da könnte das Buch "Captain Ciaociao erobert Java" eine gute Sache sein.

Das wäre, was Ich Dir für einen Start empfehlen würde. Aber man kann auch nach Lernvideos schauen, aber das ist eine Lernmethode, mit der ich keine Erfahrungen habe. Aber da gibt es diverse Anbieter und da kann man oft Kurse stark reduziert kaufen.

Was den generellen Ansatz angeht: Da ist der Ansatz im Groben immer gleich:
  • Als erstes kommt das Verstehen. In diesem Schritt verzichtet man komplett auf Java. Da wird die Problematik analysiert und überlegt, wie man es lösen kann. Wie genau geht man also vor? Da arbeitet man am Besten mit Stift und Papier, kann sich Dinge aufschreiben / aufmalen um so einen Überblick zu haben, was man mit Daten machen muss. Dabei ist wichtig, dass man mit keinen Daten "im Kopf" rechnet. Nur, was auf dem Zettel auch steht, das darf verwendet werden!
  • Wenn man so eine Beschreibung aufgeschrieben hat (die muss so genau sein, dass Du diese anderen geben kannst und die können das dann machen - ohne die Aufgabe zu kennen), dann gehst Du an die Umsetzung. Dabei kann es sein, dass ein Schritt so noch nicht umsetzbar ist - dann gehst Du für diesen Teilschritt erneut so vor wie hier beschrieben! Das werden dann in Java eigene Methoden.

Was hier die Aufgabe angeht: Da ist noch das Verständnis wichtig, was in Java ein Zeichen ist. So ein Zeichen / char ist eine einfache 16 Bit Zahl. Das Zeichen 'A' ist also eine Zahl. Ebenso das 'a' oder jedes andere Zeichen. Auch das Zeichen in der Variablen c ist dann eine solche Zahl.
Das führt dazu, dass man damit rechnen kann. Java selbst ist aber begrenzt bei den Möglichkeiten. Java kann nur mit int rechnen, weshalb diese char bei einer Berechnung direkt in int Werte umgewandelt werden. Diese Umwandlung geht implizit, d.h. die macht Java einfach so, weil dabei keine Informationen verloren gehen können.
Welche Zahlen für die einzelnen Zeichen stehen, ist egal. Wichtig ist aber, dass diese aufeinander Folgen. 'b' ist also 'a'+1 und z ist 'a'+25.

Du kannst also ermitteln, der wievielte Buchstabe nach dem 'a' oder 'A' das Zeichen gerade ist. (c - 'A') um dann die Verschiebung zu machen.
Danach musst du aber aufpassen: Wenn du hinter dem Z bist, dann musst Du wieder vorne beim A anfangen. Also aus der 26 musst Du eine 0 machen, aus der 27 eine 1, u.s.w. In der Lösung wurde dazu % 26 als Operator benutzt.
Übung: Kannst Du es ohne % Operator machen? Wie ginge es anders in Code?
Wenn man dann weiss, welches Zeichen ab dem A das verschlüsselte Zeichen ist, dann kann man wieder die Zählung ab dem A zu dem Code für den Buchstaben machen - das ist das + 'A'.

Der Prozess sieht beim Dekodieren genau so aus. Nur um wie viele Zeichen muss man dann verschieben? Du kannst das Entschlüsseln also als Aufruf des verschlüsselns darstellen.
 

Zurück
Oben