Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304
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);
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?
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);
}
}
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?
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);
}
}
Koden som finns i posten funkar nu:)
- Igår Europol ställer sig emot end-to-end-kryptering 118
- Igår Svenska speljätten Embracer splittras – blir tre separata bolag 16
- Igår Snabbkoll: Brukar du handla begagnad teknik? 86
- Igår Akira har tjänat en halv miljard kronor på ransomware-attacker 14
- 21 / 4 Gamers Nexus: EK Water Blocks har problem 32
- Googles nästa Chromecast får dubblerad lagring7
- Webhallen config, kan inte hitta 2 st sata diskar 3,511
- Europol ställer sig emot end-to-end-kryptering119
- Snabbkoll: Brukar du handla begagnad teknik?86
- Tips på bra sci-fi böcker58
- Vad lyssnar du på just nu?13875
- MacOS till Synology över Lan är ostabilt. Vad kan detta bero på?36
- Köpråd bil26
- Dagens fynd — Diskussionstråden49466
- 1000 kr i matkostnader!160
- Säljes Logitech G915 Lightspeed trådlöst tangentbord GL Tactile & Logitech G Pro Wireless
- Säljes ZOWIE XL2566K
- Säljes Stationär dator + skärm + laptop + ram
- Säljes KFA2 GeForce RTX 4070 Ti EX Gamer (1 Click-OC)
- Säljes Noctua NH-D15S (1x AM4 & 1x LGA 115x)
- Säljes Stationär gamingdator (i7-6700K & GTX 1060)
- Säljes LG Ultragear 32" 1440p 180Hz Nano IPS (32GP850)
- Köpes grafikkort köpes, gärna frankensteinade kort eller utan fläkt
- Säljes Asus GeForce RTX 2080 ROG Strix Gaming OC 8GB
- Köpes Köpes - i7 4770-4790(K)
- Googles nästa Chromecast får dubblerad lagring7
- EK Water Blocks lovar bot och bättring8
- Tiny11 gör Windows 11-installationen lätt19
- SFW! Känn doften av nyklippt gräs med Dreame Roboticmower A115
- Så ska Louqe locka tillbaka chassiälskarna7
- Enklare installera Windows-program från webben11
- Nanosys: QDEL-tekniken potentiellt redo för kommersiell lansering 202629
- Europol ställer sig emot end-to-end-kryptering119
- Svenska speljätten Embracer splittras – blir tre separata bolag16
- Snabbkoll: Brukar du handla begagnad teknik?86