14 svar
70 visningar
dajamanté är nöjd med hjälpen!
dajamanté 5228
Postad: 14 jan 2019

run length encoding uppgift

Hej PA:are!

Jag har en problem när jag försöker lösa detta uppgift, när jag sparar String:en. Det visar sig att alla uppropstecken, komma och andra tecken inte inte går att läsas? Varför då tycker ni?

 for (int i = 0; i < phrase.length() - 1; i++) {
                           if (phrase.charAt(i) == phrase.charAt(i + 1))
                               count++;
                          else {
                               sb.append(phrase.charAt(i)).append(count);
                               count = 1;
                 }
 }

Laguna Online 4386
Postad: 14 jan 2019

Det där ser vettigt ut, så felet är nog någon annanstans. Är hela programmet för stort för att visa här? Vad menar du med "inte går att läsa"?

dajamanté 5228
Postad: 14 jan 2019

Nej det är inte för stor, men jag var säker att felet var här, eftersom när jag försöker skriva ut ordet precis efter jag sparar det får jag alla uppropstecken.

Här är filen.

Laguna Online 4386
Postad: 14 jan 2019 Redigerad: 14 jan 2019
dajamanté skrev:

Nej det är inte för stor, men jag var säker att felet var här, eftersom när jag försöker skriva ut ordet precis efter jag sparar det får jag alla uppropstecken.

Här är filen.

Den filen får inte jag se. Jag ser bara några kataloger med C++-kod på din github.

Hur borde resultatet se ut? T.ex. "aabbb", ska det bli "a2b3"? Vad ska i så fall hända med "111222"?

Jag tror att .append(count) lägger till ett tecken som har den kod som 'count' anger, inte den läsbara representationen av 'count' (med andra ord, felet är visst i den här koden). Du får i så fall göra om 'count' till 'string' först (på nåt sätt som jag inte kan utantill).

dajamanté 5228
Postad: 14 jan 2019

count läggs normalt till, det är tecken såsom ! , : som försvinner.

Här, pasta det och testa med deras testfall:

 

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

String input = scan.nextLine();
String order = input.substring(0, 1);
String phrase = input.substring(2);
StringBuilder sb = new StringBuilder();

int count = 1;

if (order.equals("E")) {
for (int i = 0; i < phrase.length() - 1; i++) {
if (phrase.charAt(i) == phrase.charAt(i + 1))
count++;
else {
sb.append(phrase.charAt(i)).append(count);
count = 1;
}
}
System.out.println(sb.toString());
}

if (order.equals("D")) {
for (int i = 0; i < phrase.length() - 1; i++) {
if (Character.isDigit(phrase.charAt(i))) {
int counting = Character.getNumericValue(phrase.charAt(i));
while (counting > 0) {
System.out.print(phrase.charAt(i - 1));
counting--;
}
}
}
}
}
}

Laguna Online 4386
Postad: 14 jan 2019

Kod är svårläst om man lägger den mot vänsterkanten. Indentera (alltså stoppa in blanktecken före) raderna så man ser vad som hör till vilka klamrar.

 

Vad är deras testfall då?

E betyder antagligen "encode". Är fallet D intressant för oss?

dajamanté 5228
Postad: 15 jan 2019 Redigerad: 15 jan 2019

Ja, jag vet, det blev så när jag pastade på PA... kan du klistra-kopiera det i IntelliJ och option cmd + L? Tar för långt att indentera.

Ja, D = decode. Det står exempel med decode. 2 testfall står på sidan, andra är genererat när man mäter in sin kod.

Laguna Online 4386
Postad: 15 jan 2019

Jag såg inte din länk till uppgiften först.

Har du prövat andra exempel? Vad händer om man kodar "abcd" t.ex.?

Du kommer alltid tappa sista teckengruppen. akkeeeaaccccc ger t.ex. a1k2e3a2 och dafjdsakfjdslkafjdsal ger d1a1f1j1d1s1a1k1f1j1d1s1l1k1a1f1j1d1s1a1. Däremot kommer ! med utmärkt när jag kör, a!!!b...c ger a1!3b1.3

Men missa inte heller Lagunas kommentar om vad som händer när man har med siffror i sin sträng som ska kodas.

Laguna Online 4386
Postad: 15 jan 2019
haraldfreij skrev:

Men missa inte heller Lagunas kommentar om vad som händer när man har med siffror i sin sträng som ska kodas.

Jag hade inte läst problemformuleringen då. Det står att siffror inte är med, så då uppstår inga problem.

dajamanté 5228
Postad: 16 jan 2019
haraldfreij skrev:

Du kommer alltid tappa sista teckengruppen. akkeeeaaccccc ger t.ex. a1k2e3a2 och dafjdsakfjdslkafjdsal ger d1a1f1j1d1s1a1k1f1j1d1s1l1k1a1f1j1d1s1a1. Däremot kommer ! med utmärkt när jag kör, a!!!b...c ger a1!3b1.3

 Varför då haraldfreij?

Laguna Online 4386
Postad: 16 jan 2019
dajamanté skrev:
haraldfreij skrev:

Du kommer alltid tappa sista teckengruppen. akkeeeaaccccc ger t.ex. a1k2e3a2 och dafjdsakfjdslkafjdsal ger d1a1f1j1d1s1a1k1f1j1d1s1l1k1a1f1j1d1s1a1. Däremot kommer ! med utmärkt när jag kör, a!!!b...c ger a1!3b1.3

 Varför då haraldfreij?

Prova det jag föreslog, "abcd", och titta noga rad för rad i programmet vad som händer. Jag menar gå igenom det för hand, även kallat "torrsimma".

Fundera på vad som händer i slutet av strängen. Det sista tecknet itererar du aldrig över, eftersom du kör så länge i < phrase.length() - 1. Du skriver bara ifall tecknet inte är samma som nästa.

dajamanté 5228
Postad: 21 jan 2019

Tack! Sorry för sent svar, jag kunde inte logga in ett tag.

Svara Avbryt
Close