Avatar billede malras Nybegynder
19. april 2004 - 20:14 Der er 22 kommentarer og
1 løsning

kryptering og dekryptering

Hejsa.

Vi sidder med følgende opgave:
Vi skal skrive en metode til kryptering som læser en kildefil linie for linie. Hvis linien ikke er tom skal metoden bestemme liniens længde og læse hver enkelt bogstav ved hjælp af metoden charAt(int). Vores kode ser således ud nu:

import java.io.*;
import tio.*;
import java.util.*;

class Encrypte{
   
    static void encrypt(String source, String pad, String target) throws IOException{
       
        BufferedReader in = new BufferedReader (new FileReader("message.txt"));
        PrintWriter out1 = new PrintWriter(new FileWriter("pad.txt"));
        PrintWriter out2 = new PrintWriter(new FileWriter("target.txt"));
       
    String line = null;
    line = in.readLine();
    char c;

   
    while(line != null){
      line = in.readLine();
     
      StringBuffer cipher = new StringBuffer(line.length());
      for (int i = 0; i< line.length(); i++){
        c = line.charAt(int)
         
          if (Character.isLetter(c)){
      cipher.append((char)((1-'a'+key)%26+'a'));
            out2.write(c);
      cipher.append((char)('a'+key));
            out1.write(c);
          }
          else {
              cipher.append(c);
              out2.write(c);
        }
     
      in.close();}
  }
 
     
  }
}
 
Det giver os imidlertid følgende irriterende fejl som vi ikke kan løse:

H:\GP\afl_10\encrypte.java:23: '.class' expected
        c = line.charAt(int)
                          ^
H:\GP\afl_10\encrypte.java:36: ')' expected
      in.close();}
                  ^
2 errors

Og ja vi er nybegyndere i Java:-)
Avatar billede arne_v Ekspert
19. april 2004 - 20:16 #1
c = line.charAt(int)

->

c = line.charAt(i)
Avatar billede arne_v Ekspert
19. april 2004 - 20:19 #2
Og så mangler der nogle } til sidst.
Avatar billede skwat Praktikant
19. april 2004 - 20:20 #3
import java.io.*;
import tio.*;
import java.util.*;

class Encrypte{

    static void encrypt(String source, String pad, String target) throws IOException{

        BufferedReader in = new BufferedReader (new FileReader("message.txt"));
        PrintWriter out1 = new PrintWriter(new FileWriter("pad.txt"));
        PrintWriter out2 = new PrintWriter(new FileWriter("target.txt"));

        String line = null;
        line = in.readLine();
        char c;


        while(line != null){
            line = in.readLine();

            StringBuffer cipher = new StringBuffer(line.length());
            for (int i = 0; i< line.length(); i++){
                c = line.charAt(int);

                if (Character.isLetter(c)){
                cipher.append((char)((1-'a'+key)%26+'a'));
                out2.write(c);
                cipher.append((char)('a'+key));
                out1.write(c);
            }
            else {
                cipher.append(c);
                out2.write(c);
            }
                in.close();
            }
        }


    }
}
Avatar billede arne_v Ekspert
19. april 2004 - 20:20 #4
Og et semikolon efter charAt linien
Avatar billede skwat Praktikant
19. april 2004 - 20:23 #5
+ vad Arne_v sagde :)
Avatar billede malras Nybegynder
19. april 2004 - 20:28 #6
Hold da op det gik stærkt:-) Vi kigger lige på det og tænker lidt....
Avatar billede malras Nybegynder
19. april 2004 - 20:33 #7
Umiddelbart fik vi løst de to fejl, men så er der heldigvis dukkt nogle andre op:-(
Vi har defineret key til at være en int, idet vi fik fejl på manglende variabel. Men nu får vi så følgende:

H:\GP\afl_10\encrypt.java:26: variable key might not have been initialized
      cipher.append((char)((1-'a'+ key)%26+'a'));
                                  ^
1 error
Avatar billede arne_v Ekspert
19. april 2004 - 20:35 #8
Giv key en værdi ...
Avatar billede malras Nybegynder
19. april 2004 - 20:44 #9
og hvad så hvis key skal være random, fx. mellem 0-25 begge inkl. ....
Avatar billede arne_v Ekspert
19. april 2004 - 20:46 #10
Random rng = new Random();
int key = rng.nextInt(26);
Avatar billede arne_v Ekspert
19. april 2004 - 20:46 #11
Men overvej lige hvordan i finder samme key til dekryptering
Avatar billede malras Nybegynder
19. april 2004 - 20:49 #12
det gør vi ved : key = c-'a'?...
Avatar billede malras Nybegynder
19. april 2004 - 21:02 #13
Og så kommer det store spærgsmål, hvordan tildeler vi egentlig point til dig?
Avatar billede malras Nybegynder
19. april 2004 - 21:03 #14
spørgsmål...
Avatar billede arne_v Ekspert
19. april 2004 - 21:05 #15
jeg ligger et svar
Avatar billede malras Nybegynder
19. april 2004 - 21:12 #16
Går ud fra det er ok nu?
Avatar billede arne_v Ekspert
19. april 2004 - 21:18 #17
I har ikke accepteret svaret.

Man skal markere brugernavn og klikke accepter
Avatar billede malras Nybegynder
19. april 2004 - 21:55 #18
kan vi nå at spørge om mere? Fx. hvordan vi giver c en værdi mellem 0-25? Det skal jo initialiseres som en integer, men hvor?


import java.io.*;
import tio.*;
import java.util.*;

class Decrypt{
   
    static void decrypt(String source, String pad, String target) throws IOException{
       
        BufferedReader in1 = new BufferedReader (new FileReader("message.txt"));
        BufferedReader in2 = new BufferedReader (new FileReader("pad.txt"));
        PrintWriter out = new PrintWriter(new FileWriter("target.txt"));
       
    String line = null;
    line = in2.readLine();
        char c = ?
    int key = c-'a';
   
   
    while(line != null){
      line = in2.readLine();
     
     
      StringBuffer cipher = new StringBuffer(line.length());
      for (int i = 0; i< line.length(); i++){
        c = line.charAt(i);
          if (Character.isLetter(c)){
      cipher.append((char)((1-'a'+ 26-key)%26+'a'));
            out.write(c);
         
          }
          else {
              cipher.append(c);
              out.write(c);
        }
     
      in1.close();
      in2.close();
     
      }
  }
       
  }
}
Avatar billede arne_v Ekspert
19. april 2004 - 22:00 #19
Så I min 20:46:19 kommentar ?
Avatar billede malras Nybegynder
19. april 2004 - 22:03 #20
Ja den har vi prøvet men så får vi fejlen at der muligvis tabes data fordi der findes en int og behøves en char, så vi skal vel lave en særlig definering af at det skal være en int et sted, men det virker ikke rigtigt...
Avatar billede malras Nybegynder
19. april 2004 - 22:04 #21
vi forsøger med Interger.parseInt for c
Avatar billede arne_v Ekspert
19. april 2004 - 22:06 #22
Random rng = new Random();
char c = (char)rng.nextInt(26);
Avatar billede malras Nybegynder
19. april 2004 - 22:09 #23
Tak for hjælpen:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester