06. september 2010 - 19:39Der er
8 kommentarer og 2 løsninger
Opgave om simpel Kryptering i Java - How to program.
Hej
Opgaven er 4.35 i Java-how to program international edt.
Programmet skal fra brugeren få et tal (4 char langt) og trække hvert char ud, plusse med 7, og derefter tage remainderen efter at have divideret tallet op i 10. Tilsidst byttes rundt på tallene.
Jeg har fået lavet den der kan kode det, men kan ikke lure hvordan jeg skal afkode det med remainderen, nogen der har nogle ideer?
Smider koden til selve krypteringen her:
public class EnforcingPrivacyWithCryptography { String volapyk1 ; String translatedNumberString; String theNumberString; int counter = 0, theNumber = 0,tal1,tal2,tal3,tal4;
Er ikke helt med på hvordan jeg skal bruge det du skriver. Har taget en del af det og smidt ind under hver if sætning i decrypteringen. Som nævnt er det kun decrypteringen der ikke virker, kan sagtens kryptere et tal. Men når jeg så forsøger at oversætte det "tilbage" til det første tal kan jeg ikke regne ud hvordan jeg skal lave det med en remainder omvendt. hvis jeg har et 1-tal: ((1+7) % 10) hvordan laver jeg denne aktion omvendt, så jeg når jeg har 8 kan få et 1-tal igen?
public class EnforcingPrivacyWithCryptography { String volapyk1 ; String translatedNumberString; String theNumberString; int counter = 0, theNumber = 0,tal1,tal2,tal3,tal4;
problemet er du tager de gamle tal igen i undoTranslate, du skal bruge de tal du allerede har gemt. public void undoTranslation() { tal1=(tal1 + 3) % 10; tal2=(tal2 + 3) % 10; tal3=(tal3 + 3) % 10; tal4=(tal4 + 3) % 10; } ville jeg lave det ud fra din kode.
HEHE. Bamma. Tak for hjælpen, lidt dum fejl. I deler points da metoden som Arne V gav egetnlig var det jeg spurgte om selvom der også var yderligere fejl i koden. Læg venligst svar begge.
public class Privacy { public static int encrypt(int v, int offset) { if(v < 0 || v > 9) throw new IllegalArgumentException("Non digit in string"); return (v + offset) % 10; } public static int decrypt(int v, int offset) { if(v < 0 || v > 9) throw new IllegalArgumentException("Non digit in string"); return (v - offset + 10) % 10; } public static String encrypt(String s, int offset, int[] ix) { if(s.length() != ix.length) throw new IllegalArgumentException("String and index of different length"); char[] c = new char[s.length()]; for(int i = 0; i < s.length(); i++) { c[ix[i]] = (char)(encrypt(s.charAt(i) - '0', offset) + '0'); } return new String(c); } public static String decrypt(String s, int offset, int[] ix) { if(s.length() != ix.length) throw new IllegalArgumentException("String and index of different length"); char[] c = new char[s.length()]; for(int i = 0; i < s.length(); i++) { c[i] = (char)(decrypt(s.charAt(ix[i]) - '0', offset) + '0'); } return new String(c); } public static void main(String[] args) { String s1 = "1357"; String s2 = encrypt(s1, 7, new int[] { 2, 3, 0, 1 }); String s3 = decrypt(s2, 7, new int[] { 2, 3, 0, 1 }); System.out.println(s1 + " -> " + s2 + " -> " + s3);
Inspirerende løsningsforslag. Dog umiddelbart for avanceret til mig på mit nuværende niveau. :-)
Synes godt om
Ny brugerNybegynder
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.