Java programmeringsuppgift hjälp

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2013

Java programmeringsuppgift hjälp

Någon som har något tips på hur man löser uppgift 1 (Gömda ord)
Uppgifter

Så har långt har jag kommit hittills (Jag vet att min kod inte ger önskat resultat.):

import java.util.*; public class Olympiaden { static Scanner scan = new Scanner(System.in); public static void kryptering(){ System.out.println("Input"); String svar = ""; String kry = scan.nextLine(); for(int i = 0; i <= (kry.length()-1);){ char bokstav = kry.charAt(i); svar = svar + bokstav; int ascii = (int) bokstav; i = i + (ascii-64); } System.out.println(svar); } }

Trädvy Permalänk
Medlem
Registrerad
Apr 2002
Skrivet av ericeric113:

Någon som har något tips på hur man löser uppgift 1 (Gömda ord)
Uppgifter

Så har långt har jag kommit hittills (Jag vet att min kod inte ger önskat resultat.):

import java.util.*; public class Olympiaden { static Scanner scan = new Scanner(System.in); static void kryptering(){ System.out.println("Input"); String svar = ""; String kry = scan.nextLine(); int langd = kry.length(); for(int i = 0; i <= langd;){ char bokstav = kry.charAt(i); svar = svar + bokstav; int ascii = (int) bokstav; i = i + (ascii-64); } System.out.println(svar); } }

Du verkar ju vara inne på rätt spår och så. Jag vet inte riktigt vad man ska tipsa om direkt gällande lösningen utan att bara ge lösningen.

Däremot undrar jag ju vad tillvägagångssättet är just i och med att du ser ut att vara rätt nära utan att ta dig hela vägen. Man kan ju visserligen stirra på koden och resonera och leta fel men att helt enkelt sätta en brytpunkt och stega igenom med en debugger känns ju som något som skulle kunna hjälpa en hel del. Vad använder du för IDE?

Edit: Du är väl t.o.m. extremt nära iom de uppdateringar du postat, mest att det utöver att lösa problemet även kraschar?

Intel i7 6850k || Asus X99-A II || Evga GTX 980Ti || Kingston HyperX Fury 2666 64GB || Samsung 950 Pro 512GB || XB270HU 1440p IPS G-Sync

Trädvy Permalänk
Medlem
Registrerad
Okt 2015

@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
Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2013
Skrivet av evil penguin:

Du verkar ju vara inne på rätt spår och så. Jag vet inte riktigt vad man ska tipsa om direkt gällande lösningen utan att bara ge lösningen.

Däremot undrar jag ju vad tillvägagångssättet är just i och med att du ser ut att vara rätt nära utan att ta dig hela vägen. Man kan ju visserligen stirra på koden och resonera och leta fel men att helt enkelt sätta en brytpunkt och stega igenom med en debugger känns ju som något som skulle kunna hjälpa en hel del. Vad använder du för IDE?

Edit: Du är väl t.o.m. extremt nära iom de uppdateringar du postat, mest att det utöver att lösa problemet även kraschar?

Skrivet av for_each_while:

@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

Koden som finns i posten funkar nu:)