@ericeric113:
Du är nära, men känns som du saknar att veta lite när du ska använda vad, ska se om jag kan få dig att förstå.
Om någon mod eller någon annan tycker att detta svaret ska tas bort så får ni anmäla inlägget.
Det som for loopen gör är att rada upp alla 26 bokstäverna i engelska alfabetet. Går säkert att lägga till ÅÄÖ men orkar inte kolla upp om dom är på platserna efter Z vilket jag inte tror dom är. Vill du så kan du lösa det.
Vill du läsa in strängarna från en fil eller att du skriver in det i konsolen så får du fixa det själv
do while:
Denna körs så länge nextValue inte överstiger längden av den krypterade strängen.
encrypted.substring tar ut första värdet eftersom nextValue är satt till 0 som default.
Sen hämtar den indexen(platsen) som bokstaven har i alfabetet i ascii arrayen. Jag lägger till +1 för en array börjar på 0, A är ju representerad som 1 och inte 0 i uppgiften. B som 2 osv.
Sen tar jag bokstaven jag kopierat med hjälp av substring och lägger till den i decrypted strängen.
Varför använda en do while över en while?
För att här vet du att du måste köra loopen en gång, du börjar alltid på index 0. att köra en kontroll innan du hoppar in i loopen är onödigt.
public class Encryption {
public static void main(String[] args) {
String encrypted = "HZBKRYAFEAAAAJ";
String decrypted = "";
int nextValue = 0;
List<String> ascii = new ArrayList<String>(26);
for(char c = 'A'; c <= 'Z'; c++) {
ascii.add(String.valueOf(c));
}
do {
String tempChar = encrypted.substring(nextValue, nextValue + 1);
nextValue += ascii.indexOf(tempChar) + 1;
decrypted += tempChar;
} while(nextValue <= encrypted.length());
System.out.println(decrypted);
}
}
Dold text