2017-09-15 2 views
-4

Ich versuche, ein Programm, das Strings spaltet, und gibt die Saiten mit 3 oder mehr Vokalen und ich bekomme immer eine Array außerhalb der Grenze Ausnahme. Ich weiß nicht, wie man ein Array am Ende der Methode zurückgibt.Ich bekomme immer ein Array außerhalb der Grenze Ausnahme

Wo ist das Problem in meinem Programm, das ich anscheinend nicht sehen kann?

public class SplitWords { 

    public static void main(String [] args){ 
     Scanner scan = new Scanner(System.in); 

     final int MIN_SIZE = 4; 
     int size = 0; 

     do{ 

      System.out.println("How many words are you typing(min " + MIN_SIZE + "): "); 
      size = scan.nextInt(); 
     }while(size < MIN_SIZE); 
     scan.nextLine(); 

     String[] myarray = new String[size]; 
     for(int i = 0; i < myarray.length; i++){ 
      System.out.println("Type the sentence in the position " + i); 
      myarray[i] = scan.nextLine(); 
     } 

     System.out.println("The words which have 3 or more vowels are: " + findVowels(myarray)); 
    } 

    public static String findVowels(String[] myarray){ 
    for(int i = 0; i < myarray.length; i++){ 
     String[] tokens = myarray[i].split(" "); 
       int count = 0; 
       for(int j = 0; j < myarray.length; j++) { 
        if(isVowel(tokens[i].charAt(j))){ 
          count++;      
        } 
       } 
       if(count > 3){ 
        break; 
       } 
    } 
     return null; 
    } 

    public static boolean isVowel(char ch){ 
      switch(ch){ 
       case 'a': 
        case'e': 
         case'i': 
          case'o': 
           case'u': 
            case'y': 
             return true; 
      } 
      return false; 
    } 
} 
+0

'tokens [i]' .... warum würden Sie annehmen, dass 'token' mindestens' i + 1' Elemente haben? – lurker

+0

In 'if (isVowel (tokens [i] .charAt (j)))' was lässt dich denken, dass 'tokens [i]' tatsächlich existiert? –

Antwort

0

Warum teilen Sie die Zeichenfolge in Tokens? Auch wenn ich String [] aufrufen würde, würde ich annehmen, dass Sie entweder char [] oder String gemeint haben, weil Sie ein Array von Strings erstellen und so handeln, als wäre das Array von Strings eine einzelne Zeichenfolge. Verwenden Sie einfach "String" nicht "String []"

+0

im sehr sorry Jungs, ich bin ein Anfänger ersten Jahr der Uni, und dies war ein Assigment und es wird mir auf meine Prüfung helfen – JaneSus

0

Das ist das Problem

for(int j = 0; j < myarray.length; j++) { 
        if(isVowel(tokens[i].charAt(j))){ 
          count++;      
        } 
       } 

Wenn Sie die Zeichenfolge geteilt haben

String[] tokens = myarray[i].split(" "); 

Warum nicht tokens.length anstelle von myarray.length, und benutze Token [j] nicht ich, ich bin der Zähler für die Anzahl der Zeichenfolgen, die Sie haben.

Nachdem Sie die obigen Änderungen zu integrieren, sollten Sie Ihren Code so aussehen

public static String findVowels(String[] myarray){ 

     for(int i = 0; i < myarray.length; i++){ 

      String[] tokens = myarray[i].split(" "); 
        int count = 0; 
        for(int j = 0; j < tokens.length; j++) { 

         String str = tokens[j]; 

         for (int j2 = 0; j2 < str.length(); j2++) { 

          if(isVowel(str.charAt(j2))){ 
            count++;      
          } 
          if(count > 3){ 
           break; 
          } 
         } 

        } 

     } 
      return null; 
     } 

Dies keine Ausnahme nicht geben, aber ich bin ganz mit der Logik dieser Code überrascht, wie Sie am Ende null zurückkehren, von die Methode egal was.

+0

Ich tat, was Sie sagten, und es kehrte Null – JaneSus

+0

Ihr Code enthält viele Bugs, habe ich die Methode behoben was ein Problem verursacht, Tokens [j] ist eine Zeichenkette und Sie müssen diese Zeichenkette durchlaufen, um jedes Zeichen zu überprüfen, Sie haben etwas falsch in Ihrem Code gemacht –

+0

Ich wusste nicht, wie man das Array mit den aufgeteilten Wörtern am Ende das Problem zurückgibt – JaneSus

Verwandte Themen