2017-02-17 1 views
1

Я пытаюсь выполнить программу, которая находит самое большое непрерывное вхождение в строку. Вот мой код.найти наивысшее непрерывное появление символа в строке, вызывая строковый индекс за пределами

public class Assign2{ 
    public int maxOcc(String str){ 
     System.out.println("Entered method"); 
     int j,i,counter; 
     j = i = 0; 
     int max = 0; 
     int size = str.length(); 
     System.out.println("Size of string-->"+size); 
     for(i = 0;i<size;i++){ 
      j = i; 
      counter = 0; 
      while(str.charAt(i)==str.charAt(j) && j < size){ 
       counter++; 
       j++; 
      } 
      if(counter > max) 
       max = counter; 
     } 
     return max; 
    } 
    public static void main(String args[]){ 
     Assign2 a = new Assign2(); 
     System.out.println(a.maxOcc("abbbbaaaaaagsgsgaaaa")); 
    } 
} 

Однако когда я пытаюсь запустить эту программу, я поколение «индекс строки из границ» .any идей?

ответ

1

Проблема находится в этом состоянии:

while(str.charAt(i)==str.charAt(j) && j < size){ 

Java оценивает слева направо, поэтому он оценивает str.charAt(j), прежде чем он проверяет j < size - так что если j слишком большой (потому что увеличивается в цикле), вы получите AIOOBE.

Реверс подвыражения:

while (j < size && str.charAt(i)==str.charAt(j)){ 

Это не обязательно, потому что && короткого замыкания: когда j < size является ложным, это не мешает проверить остальное.

+0

О, спасибо вам большое !!!!!!! –

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