2015-01-27 3 views
-1
{ 
    public static int WordCount (String cString) 
    {  
     String currentWord; 
     int index; 
     int spacePos; 
     int validWordCount=0; 
     boolean validWord; 
     char upClowC; 

     cString=cString.trim()+" "; 

     spacePos=cString.indexOf(" "); 

     validWord=true; 

     for(index=0;index<cString.length();index++) 
     { 
      currentWord=cString.substring(0,spacePos); 
      upClowC=Character.toUpperCase(currentWord.charAt(index)); 
      if(upClowC<'A'||upClowC>'Z') 
      { 
       validWord=false; 
      } 
     } 

     if(validWord==true) 
     { 
      validWordCount++; 
     } 

     return validWordCount; 
    } 

    public static void main(String[] args) 
    { 
     String sentence; 

     System.out.println("enter a sentence:"); 
     sentence=EasyIn.getString(); 

    WordCount(sentence); 
    } 
} 

Я пытаюсь создать метод, который принимает предложение и выбирает действительные слова (т. Е. Числа или символы), но я продолжаю получать ошибку за пределами границ.действительное слово counter out of bounds error

Я не могу использовать массив.

+4

Пожалуйста, покажите нам исключение, которое вы получите – MinecraftShamrock

+0

Больше, чем ошибка, есть тот факт, что этот код не делает то, что ожидает OP – yunandtidus

ответ

2

Ваша проблема здесь:

currentWord = cString.substring(0, spacePos); 
upClowC = Character.toUpperCase(currentWord.charAt(index)); 

currentWord становится короче, но index все еще работает от 0 до длины строки.

Общие замечания:

  • Следовать Java naming conventions и изменить название вашего метода, чтобы начать с маленькой буквы

  • if(validWord) достаточно, если вы хотите сравнить что-то true, в противном случае, это как спрашивать " Действительно ли это значение «вместо просто» - значение true «

  • В следующий раз разместим ваш трассировки стека, чтобы получить лучше и быстрее помочь

+0

Я бы предложил взять эту первую строку из цикла 'for', что на самом деле решить проблему. В противном случае, хороший ответ. – DaaaahWhoosh

0

В вашем коде, вы делаете

spacePos = cString.indexOf(" "); 

, а затем внутри цикла:

currentWord = cString.substring(0,spacePos); 
upClowC = Character.toUpperCase(currentWord.charAt(index)); 

сейчас , из-за цикла индекс будет принимать значения от 0 до длины строки минус 1. Если ваша подстрока (currentWord) меньше вашей строки, что, вероятно, есть, то currentWord.charAt(index) попытается проиндексировать пределы подстроки, поэтому вы получаете ошибку.