Reputation: 2467
I'm making a program for run-length encoding which is used to shorten words. i.e. aaabbc becomes 3a2bc
My program works so far but instead of outputting 3a2bc it does a3b2c. So how can I make my current program switch?
Code:
public class Compress {
public static void main(String[] args) {
String word = "aaabbc";
System.out.println(compress(word));
}
public static String compress (String original){
String compressed = "";
char ch = original.charAt(0);
int counter = 1;
for (int i = 1; i < original.length(); i++) {
if (ch == original.charAt(i)) {
counter = counter + 1;
}
else {
compressed = compressed + ch;
if(counter != 1){
compressed = compressed + counter;
}
ch = original.charAt(i);
counter = 1;
}
}
compressed = compressed + ch;
if(counter != 1){
compressed = compressed + counter;
}
return compressed;
}
}
Upvotes: 1
Views: 305
Reputation: 35011
where you have:
else {
compressed = compressed + ch;
if(counter != 1){
compressed = compressed + counter;
}
ch = original.charAt(i);
counter = 1;
}
you should switch the first two statement blocks, like
else {
if(counter != 1){
compressed = compressed + counter;
}
compressed = compressed + ch;
ch = original.charAt(i);
counter = 1;
}
BTW, its much more efficient to use StringBuilder for this rather than String
Upvotes: 2