2013-08-31 30 views
5

Oto mój kod:Array Index Out of Bounds Exception (Java)

public class countChar { 

    public static void main(String[] args) { 
     int i; 
     String userInput = new String(); 

     userInput = Input.getString("Please enter a sentence"); 

     int[] total = totalChars(userInput.toLowerCase()); 

     for (i = 0; i < total.length; i++); 
     { 
      if (total[i] != 0) { 
       System.out.println("Letter" + (char) ('a' + i) + " count =" + total[i]); 
      } 
     } 
    } 

    public static int[] totalChars(String userInput) { 
     int[] total = new int[26]; 
     int i; 
     for (i = 0; i < userInput.length(); i++) { 
      if (Character.isLetter(userInput.charAt(i))) { 
       total[userInput.charAt(i) - 'a']++; 
      } 
     } 
     return total; 
    } 
} 

Celem programu jest zwrócenie użytkownikowi na sznurku, a następnie policzyć, ile razy każdy znak jest używany w ciągu .

Kiedy idę do kompilacji programu, działa dobrze. Kiedy uruchamiam program, jestem w stanie wejść ciąg w oknie popup, ale po złożeniu łańcuch i naciśnij przycisk OK, pojawia się błąd, mówiąc

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 26 
at countChar.main(countChar.java:14) 

nie jestem całkowicie pewien, co problem jest i jak to naprawić.

+6

Myślę, że pętla 'for' powinna zawrzeć instrukcję' if', a ';' na końcu jest niepoprawne. –

+0

Czy możesz wskazać, która linia jest linią 14? (Użyj tutaj '// <- ArrayIndexOutOfBoundsException") – Stewart

Odpowiedz

14
for (i = 0; i < total.length; i++); 
            ^-- remove the semi-colon here 

Dzięki tej średnikiem, pętla pętle aż i == total.length, nic nie robić, a potem co wydawało ci się ciało pętli jest wykonywany.

+1

Czuję, że inne formatowanie '{' (tj. Na końcu linii 'for') mogło uczynić to oczywistym. – Stewart

+0

Zaktualizowałem kod, a teraz dostaję ten błąd: 'countChar.java:18: błąd: niedozwolone rozpoczęcie wyrażenia public static int [] totalChars (String userInput) ^' Ten błąd występuje dla wszystkich pozostałych słów druga linia deklaracji metody. – Boxasauras

+1

'for (i = 0;! Kompilator.someoneFixesTheCompilerToWarnAboutThisError(); i ++) StackOverflow.answerQuestionBySomeoneToMakeThisSameErrorAgain();' Jaka jest bieżąca wartość 'i'? Podejrzewam, że jest już w tysiącach ... – ajb

6
for (i = 0; i < total.length; i++); // remove this 
{ 
    if (total[i]!=0) 
     System.out.println("Letter" + (char)('a' + i) + " count =" + total[i]); 
} 

Pętla for pętle aż i=26 (gdzie 26 jest total.length) i wówczas if jest wykonywany, wykraczających ponad granice tablicy. Usuń ; na końcu pętli for.

0

Należy usunąć ten

for (i = 0; i < total.length; i++); 
+0

To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, zostaw komentarz pod swoim postem - zawsze możesz komentować swoje posty, a gdy już masz wystarczającą [reputację] (http://stackoverflow.com/help/whats-reputation), być w stanie [komentować dowolny wpis] (http://stackoverflow.com/help/privileges/comment). – paqogomez

+0

Jestem nowy w tej sieci społecznościowej. Przeczytam zasady, aby publikować i odpowiadać na pytania. Dziękuję Ci! –

0

To jest bardzo dobry przykład minus Długość tablicy w Javie, daję tutaj przykładami

public static int linearSearchArray(){ 

    int[] arrayOFInt = {1,7,5,55,89,1,214,78,2,0,8,2,3,4,7}; 
    int key = 7; 
    int i = 0; 
    int count = 0; 
    for (i = 0; i< arrayOFInt.length; i++){ 
     if (arrayOFInt[i] == key){ 
     System.out.println("Key Found in arrayOFInt = " + arrayOFInt[i]); 
     count ++; 
     } 
    } 

    System.out.println("this Element found the ("+ count +") number of Times"); 
return i; 
} 

ten powyżej í < arrayOFInt.length; nie trzeba pomniejszać o jedną długość tablicy; ale jeśli ty i < = arrayOFInt.length -1; jest konieczny inny mądry arrayOutOfIndexException Wystąp, mam nadzieję, że to ci pomoże.

-1
import java.io.*; 
import java.util.Scanner; 
class ar1 { 
    public static void main(String[] args) { 
     //Scanner sc=new Scanner(System.in); 
     int[] a={10,20,30,40,12,32}; 
     int bi=0,sm=0; 
     //bi=sc.nextInt(); 
     //sm=sc.nextInt(); 
     for(int i=0;i<=a.length-1;i++) { 
      if(a[i]>a[i+1]) 
       bi=a[i]; 

      if(a[i]<a[i+1]) 
       sm=a[i]; 
     } 
     System.out.println("big"+bi+"small"+sm); 
    } 
} 
+2

Zamiast po prostu napisać blok kodu, proszę wyjaśnij swoją odpowiedź – avojak

Powiązane problemy