Java程序的编程逻辑

3
我需要用Java创建一个程序,当输入为:时,程序会做出响应:
hhllyyjhhh

输出应该是:
h2l2y2j1h3 

相反,我得到了输出


h2l2y2j1  

我知道原因,但请告诉我如何更正它,或者提供一种新的逻辑。
在下面的代码中,`T` 是字符数组,`ans` 是一个空字符串。
        int counter=0;
        for(int i=0;i<T.length;i++)
            {
            for(int j=i;j<T.length;j++)
            { 
                if(T[i]==T[j])
                {
                    counter++;
                }
                else 
                {
                    ans=ans+T[i]+counter;
                    i=j-1;
                    counter=0;
                    break;
                }
4个回答

1
for 循环 之后,您需要将最后一个字符的值附加到 ans 上,因为当前它被跳过了。
if(counter>0) {
    ans=ans+T[T.length-1]+counter
}

或者你可以只用一个for循环来做,像这样:
    char[] T = "hhllyyjhhh".toCharArray();

    int counter = 1;
    StringBuilder out = new StringBuilder();
    for(int i=0;i<T.length-1;i++) {
        if(T[i]==T[i+1]) {
            counter++;
        } else {
            out.append(T[i]).append(counter);
            counter=1;
        }
    }

    if(counter>0) {
        out.append(T[T.length-1]).append(counter);
    }
    System.out.println(out.toString());

1
问题在于如果计数一直匹配到最后一个字符,你就不会添加最后一个字符。我建议您稍微改变一下方法,在追加字符和计数之前先向前扫描一下(基本上是将 else 移动到内部循环之外)-
char[] T = "hhllyyjhhh".toCharArray();
String ans = "";
for (int i = 0; i < T.length; i++) {
  int count = 1;
  while (i + count < T.length && T[i + count] == T[i]) {
    count++;
  }
  ans += T[i] + String.valueOf(count);
  i += count - 1;
}
System.out.println(ans);

在此生成您请求的输出。

1

请检查下面的代码。注释解释了逻辑。

public static void main(String[] args) {
    // invoking our method        
    System.out.println(getCompressedString("hhllyyjhhh"));
}


private static String getCompressedString(String rawString) {

    final StringBuffer sb = new StringBuffer();
    final char[] rawStringChars = rawString.toCharArray();

    // the first symbol
    int counter = 1;
    char processingChar = rawStringChars[0];

    // processing the rest of string symbols
    for (int i = 1; i < rawStringChars.length; i++) {
        // if there's another symbol
        if (processingChar != rawStringChars[i]) {
            sb.append(processingChar);
            sb.append(counter);

            // setting new processing char and new counter
            processingChar = rawStringChars[i];
            counter = 1;
        } else {
            // if there's the same symbol
            counter ++;
        }
    }

    // writing "tail" part
    sb.append(processingChar);
    sb.append(counter);


    return sb.toString();
}

0
你需要在for循环外部添加最后一个字符及其计数,因为else部分不处理最后一个字符的附加。这里我调整了你的代码以获得所需的结果。
public static void main(String[] args) {
    char T[] = { 'h', 'h', 'l', 'l', 'y', 'y', 'j', 'h', 'h', 'l', 'a' };
    String ans = "";
    int counter = 0;
    int j = 0;
    for (int i = 0; i < T.length; i++) {
        if (j == T.length - 1) {
            if (T[i] != T[j - 1]) {
                counter = 1;
            }
            break;
        }
        for (j = i; j < T.length; j++) {
            if (T[i] == T[j]) {
                counter++;
                if (j == T.length - 1) {
                    break;
                }
            } else {
                ans = ans + T[i] + counter;
                i = j - 1;
                counter = 0;
                break;
            }
        }
    }
    if (counter > 0) {
        ans = ans + T[T.length - 1] + counter;
    }
    System.out.println(ans);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接