14 svar
211 visningar
dajamanté behöver inte mer hjälp
dajamanté 5139 – Fd. Medlem
Postad: 14 jan 2019 15:37

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 30340
Postad: 14 jan 2019 15:40

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é 5139 – Fd. Medlem
Postad: 14 jan 2019 16:00

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 30340
Postad: 14 jan 2019 16:09 Redigerad: 14 jan 2019 16:10
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é 5139 – Fd. Medlem
Postad: 14 jan 2019 16:43

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 30340
Postad: 14 jan 2019 16:56

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é 5139 – Fd. Medlem
Postad: 15 jan 2019 12:56 Redigerad: 15 jan 2019 12:56

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 30340
Postad: 15 jan 2019 14:53

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.?

haraldfreij 1322
Postad: 15 jan 2019 15:24

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

haraldfreij 1322
Postad: 15 jan 2019 15:26

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 30340
Postad: 15 jan 2019 15:51
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é 5139 – Fd. Medlem
Postad: 16 jan 2019 05:39
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 30340
Postad: 16 jan 2019 09:06
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".

haraldfreij 1322
Postad: 16 jan 2019 09:26

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é 5139 – Fd. Medlem
Postad: 21 jan 2019 10:42

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

Svara
Close