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:)
- Idag SFW! Känn doften av nyklippt gräs med Dreame Roboticmower A1 0
- Idag Så ska Louqe locka tillbaka chassiälskarna 3
- Igår Nanosys: QDEL-tekniken potentiellt redo för kommersiell lansering 2026 25
- Igår Ny Arc-drivrutin ger kraftigt höjd DX11-prestanda i många spel 18
- 21 / 4 Världens minsta fungerande Nintendo Wii-konsol avtäckt 6
- Igår Europol ställer sig emot end-to-end-kryptering 103
- Igår Svenska speljätten Embracer splittras – blir tre separata bolag 14
- Igår Snabbkoll: Brukar du handla begagnad teknik? 84
- Igår Akira har tjänat en halv miljard kronor på ransomware-attacker 13
- 21 / 4 Gamers Nexus: EK Water Blocks har problem 32
- Snart krångligare att logga ut i Windows 11114
- Robust CMS för Blog/Nyheter2
- Dagens fynd — Diskussionstråden49472
- Sänka varvtal med motstånd22
- Välja bredbandsleverantör7
- Värderingshjälp Alienware x15 R224
- Köpa nyare eller alternativ till Google nest röstassistent?0
- Ryzen 7 1800x, RX Vega 64. Prioritera uppgrading? (gaming)4
- SFW! Känn doften av nyklippt gräs med Dreame Roboticmower A10
- Avsluta ett Facebook konto med bortglömt inlogg?1
- 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)
- Säljes Steam Deck 1 TB OLED Oöppnad/Nyskick
- Säljes Asus Rog Helious GX601 + 4st Corsair LL120 fläktar
- Köpes Pulsar X2 Mini Wireless Gamingmus - Rotobox
- Säljes Asus RTX 1060 ROG Strix OC 6GB
- SFW! Känn doften av nyklippt gräs med Dreame Roboticmower A10
- Så ska Louqe locka tillbaka chassiälskarna3
- Enklare installera Windows-program från webben10
- Nanosys: QDEL-tekniken potentiellt redo för kommersiell lansering 202625
- Europol ställer sig emot end-to-end-kryptering103
- Svenska speljätten Embracer splittras – blir tre separata bolag14
- Snabbkoll: Brukar du handla begagnad teknik?84
- Akira har tjänat en halv miljard kronor på ransomware-attacker13
- Valve uppdaterar Team Fortress 2 med 64‑bitarsstöd21
- Ny Arc-drivrutin ger kraftigt höjd DX11-prestanda i många spel18