计算字符串中char(连续)的多个实例

时间:2016-10-12 19:23:51

标签: java loops iteration counter

不知道为什么我的代码不起作用。它不断返回值1而不是我期望的值。

public class Lab5Example
{
  public static void main(String[] args)
  {
  System.out.println(longestRun("aabbbccd"));
  System.out.println("Expected 3");
  System.out.println(longestRun("aaa"));
  System.out.println("Expected 3");
  System.out.println(longestRun("aabbbb"));
  System.out.println("Expected 4");
  }


public static int longestRun(String s)
{
int count = 1;
int max = 1;

for (int i = 0; i < s.length() - 1; i += 1) {
  char c = s.charAt(i);
  char current = s.charAt(i + 1);
  if (c == current) {
    count += 1;
  }
  else {
    if (count > max) {
      count = max;
    }
    current = c;       
  }
}
return max;
}  
}

调试器工作正常,所以我不知道什么不起作用。

2 个答案:

答案 0 :(得分:2)

你想要这个:

if (count > max) {
  max = count;
}

而不是:

if (count > max) {
  count = max;
}

然后在返回之前添加此内容:

if(count > max)
{
    max = count;
}
return max;

答案 1 :(得分:2)

我看到3个问题。

max = count应为count = max。这样你就可以存储到目前为止找到的最高分。

current = c应为count = 1。这样你就可以重置计数,开始计算下一个char序列。

在你的循环之外,你需要做最后的检查,看看最后一个char序列是否得分最高。 if(count > max) max = count;

这看起来都像:

for (int i = 0; i < s.length() - 1; i += 1) {
    char c = s.charAt(i);
    char current = s.charAt(i + 1);
    if (c == current) {
        count += 1;
    }
    else {
        if (count > max) {
            max = count; // #1
        }
        count = 1; // #2
    }
}
if(count > max) // #3
    max = count;

return max;