2016-10-12 2 views
-1

Не знаю, почему мой код не работает. Он продолжает возвращать значение 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; 
} 
} 

Отладчик работает неправильно, поэтому я понятия не имею, что не работает.

+0

Почему вы думаете, что отладчик не работает? –

+2

Вы инициализируете 'max' как' 1', никогда не изменяете его, а затем возвращаете; он не мог вернуть ничего, кроме '1'. – resueman

+0

Похож на комбинацию того, что вы не устанавливаете 'max' правильно (вообще), а также' count' необходимо сбросить в какой-то момент, иначе вы будете подсчитывать все повторяющиеся символы в строке, а не считать самую длинную последовательность данного символа в ряд. –

ответ

2

Я вижу 3 вопросов.

max = count должно быть count = max. Это значит, что вы храните самую высокую оценку, найденную до сих пор.

current = c должно быть count = 1. Это значит, что вы сбросили счет, чтобы начать подсчет следующего шага.

За пределами своей петли вам необходимо выполнить окончательную проверку, чтобы увидеть, имеет ли последняя последовательность символов наибольший балл. 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; 
+0

Да, я поймал 'count = max' bs сразу после того, как я опубликовал ха-ха, но я полностью забыл об перезагрузке. Определенно нужно, чтобы мой отладчик разобрался. Спасибо за помощь. – Muldawg2020

+0

Без проблем рад помочь. 'Current = c' не требуется, так как символы будут установлены на следующей итерации цикла. –

2

Вы хотите:

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

Вместо:

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

Затем в конце, прежде чем вернуться добавить следующее:

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

Даже тогда это все еще работает, только если самый длинный пробег не находится в конце строки. 'max' будет устанавливаться только при обнаружении новой буквы. Также 'count' не будет сброшен. – jonhopkins

+0

Кто отказался? По крайней мере, скажите, почему, когда вы спускаете вниз ... Если вы этого не сделаете, то как downvote помогает плакату? ... – brso05

+0

Что касается редактирования, я бы сказал, что 'if (max == 1)' должно быть другим 'if (count> max) ', на всякий случай это более длинная строка с несколькими прогонами. DV не был мне btw – jonhopkins

 Смежные вопросы

  • Нет связанных вопросов^_^