java程序的编程逻辑

时间:2014-07-23 07:26:29

标签: java logic

我需要在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 个答案:

答案 0 :(得分:1)

for loops之后,您需要将最后一个字符值附加到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 :(得分:1)

问题是,如果你的计数一直匹配,你不会添加最后一个字符,我建议你稍微改变你的方法并尝试向前扫描,然后再追加字符和计数(基本上将你的其他字符移到内部循环之外) -

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);

在此处生成您要求的输出。

答案 2 :(得分: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();
}

答案 3 :(得分: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);
}