ich habe folgendes Problem. Und zwar muss ich ein Cäsar Chiffrierung anfertigen und den Text, der entschlüsselt werden soll, muss aus einer Datei eingelesen werden. Habe folgenden Code bereits geschrieben, weiß allerdings nicht mehr weiter...Wäre echt super, wenn ihr mir helfen könntet!
Wahrscheinlich sind ultra viele Fehler drin...Sorry schon mal
Danke schon mal!
Java:
publicclass caesar{publicstaticvoidmain(String[] args){int key =2;int dekey =-2;
caesar input =newcaesar();System.out.println("Verschlüsselter Text: ");System.out.println(input.crypt(a, key));System.out.println("");System.out.println("Entschlüsserlter Text");System.out.println(input.crypt(input.crypt(a, key),dekey));}publicStringcrypt(String input,int key){char[] letters = input.toCharArray();StringBuilder result =newStringBuilder();for(int i =0; i < letters.length;++i){if(letters[i]>='A'&& letters[i]<'A'+26)
letters[i]=(char)(((letters[i]+ key -'A')%26)+'A');
result.append(letters[i]);}return result.toString();}publicvoidlesen(String a)throwsException{int zaehler =0;int z =0;String line2, line;try{
file =newFile(caesar.txt);BufferedReader in =newBufferedReader(newFileReader(file));if(!file.exists()){thrownewExsistException("Die angegbene Datei exsistiert nicht");}if(!file.isFile()){thrownewIsFileException("Der angegebene Pfad ist keine Datei");}if(!file.canRead()){thrownewReadException("Die angegebene Datei kann nicht gelesen werden");}while((line = in.readLine())!=null){
z++;}
in.close();}catch(ExsistException e){thrownewExsistException();}catch(IsFileException e){thrownewIsFileException();}catch(ReadException e){thrownewReadException();}}}
Public void lesen glaub ich ist der falsche Ansatz oder kann man das so machen? Ich müsst halt dann nen String bekommen, den ich übergebe und der mir dann entschlüsselt wird, oder? Wie bekomm ich den String aus einer Datei, die ich einlesen muss?
was verstehst du daran nicht
schau mal in google
java textdatein einlesen oder sowas gibts tausend möglichkeiten
BufferedReader->Datei zeilenweise/wortweise etc auslesen -> in ArrayList speichern-> ausgeben in Textfeld
Du liest in deinem Quelltext die Datei ja bereits ein. Anstatt mit den eingelesenen Zeilen allerdings etwas sinnvolles zu tun, erhöhst du nur den Zeilenzähler.
Speichere die Zeilen, z. B. in einer Liste, und verarbeite sie dann entsprechend.
Vielleicht solltest du uns noch sagen welchen Orignalcode du kopiert hast - aufgrund der vielen undeklarierten Variablen glaube ich nicht, dass du das selbst geschrieben hast und vor allem nicht, dass du weisst was du tust.
(Wie immer - ich lasse mich gerne vom Gegenteil überzeugen)
Der Rückgabetyp sollte aber lieber [c]List<String[/c] statt [c]ArrayList<String>[/c] sein. Außerdem fehlt die Fehlerbehandlung für die FileNotFoundException, die der FileReader-Konstruktor werfen kann.
Na ja - für den Cipher ist returnwert String mehr als genügend, aber natürlich lässt sich das auch anders gestalten - na ja, den cipher selbst nehm ich mal raus und einen loop "zeile lese", "zeile chiffrieren", "zeile schreiben" oder halt "zeile aus der Liste nehmen", "chiffrieren", "zeile in (neue?) liste schreiben" ja hoffentlich machbar ;-)
Auf den Verwendugszweck des Konstruktors ohne Parameter bin ich besonders gespannt
Java:
publicclassCaesar{privateint schluessel;publicCaesar(){
schluessel =(int)(Math.random()*25.0+1.0);}publicCaesar(int pKey){
schluessel = pKey;}publicStringcipher(String original){String geheimText ="";int num;if(schluessel >=0){// cipher
original = original.toUpperCase();//nur Grossbuchstabenfor(int i=0; i<original.length(); i++){// Tja da würde was hingehören}}else{// decipher
original = original.toLowerCase();for(int i=0; i<original.length(); i++){// da ebenfalls}}return geheimText;}publicStringdecipher(String ctext){
schluessel *=-1;String result =cipher(ctext);
schluessel *=-1;return result;}publicstaticvoid main (String[] args){Caesar caesar =newCaesar(2);String text ="veni vidi vici";System.out.println("Klartext : "+ text);String cipher = caesar.cipher(text);System.out.println("Chiffrat : "+ cipher);String decipher = caesar.decipher(cipher);System.out.println("Dechiffriert : "+ decipher);System.out.println("text.equals(decipher) ist "+ text.equals(decipher));}}
Output:
Code:
Klartext : veni vidi vici
Chiffrat : XGPK XKFK XKEK
Dechiffriert : veni vidi vici
text.equals(decipher) ist true