0

我正在尝试编写一个基本的 java 程序来压缩输入中的 java 字符串;比如aabbccdddd,进入a2b2c2d4。该程序按照我的要求执行,除了它不处理最后一个字符,我得到的是输出a2b2c2而不是a2b2c2d4. 我究竟做错了什么?

for(x = 0, y = 1; x<input.length()-1; x++)
  {
      if (input.charAt(x) != input.charAt(x+1) && count == 1)
      {
        System.out.print(input.charAt(x));
        System.out.print(count);
      }

      else if (input.charAt(x) == input.charAt(x+y))
      {
        count++;          
      }

      else if (input.charAt(x) != input.charAt(x+1) && count >= 2)
      {
        System.out.print(input.charAt(x));
        System.out.print(count);
        count = 1;

      }
      else
      {
        System.out.println("fail");
      }
  }
4

4 回答 4

1

当下一个字符与当前字符不同时打印计数。最后一个字符没有下一个字符。这就是为什么它不显示在输出中的原因。

方法一

您应该在循环后添加以下两行:

System.out.print(input.charAt(input.length()-1));
System.out.println(count);

方法二

如果修改原始输入没有问题。您可以在输入的末尾添加一个附加字符。此附加字符必须是永远不会出现在原始字符串中的字符。说是#

在循环开始之前执行此操作:

input += "#"; 
for(...)
于 2013-09-26T04:18:26.140 回答
0

循环不正确,在 input.length() 之后有“-1”。尝试:

    for(x = 0, y = 1; x<input.length(); x++) {
        // CODE HERE...
    }
于 2013-09-26T04:14:26.773 回答
0

您的for循环在您遇到一个强制您打印出正在缓冲的内容之前结束,即。当前(最后一个)字符的计数为 4。您需要在循环后打印出最后一个字符和当前计数。

以下应该做你想要的

public static void main(String[] args) throws Exception {
    String input = "aabbccdddd";
    int count= 1;
    int x, y;
    for (x = 0, y = 1; x < input.length() - 1; x++) {
        char charAtX = input.charAt(x);
        char charAtXPlus1 = input.charAt(x + 1);
        if ( charAtX != charAtXPlus1 && count == 1) {
            System.out.print(input.charAt(x));
            System.out.print(count);
        }

        else if (charAtX == input.charAt(x + y)) {
            count++;
        }

        else if (charAtX != charAtXPlus1 && count >= 2) {
            System.out.print(input.charAt(x));
            System.out.print(count);
            count = 1;

        } else {
            System.out.println("fail");
        }
    }

    System.out.print(input.charAt(x));
    System.out.println(count);
}

您应该学习如何使用正确的调试器并使用正确的调试技术。例如,我将返回的值分配input.charAt(x)给一个变量,因为我们在各种条件下重用该值,if-else并且在调试窗口中更容易看到它。

于 2013-09-26T04:20:46.810 回答
0

由于这种情况,您无法获得预期的结果

else if(input.charAt(x)!=input.charAt(x+1)&&count>=2)

失败,因为 x+1 位置没有字符。因此,您可以添加另一个条件来检查它是否是最后一个字符,然后继续使用您的代码

while (input.charAt(x) != input.length()-1)
于 2013-09-26T04:42:56.443 回答