2017-08-01 69 views
-5

这是我试图解决的初始挑战 1)采用两个参数 - 字符串中的“源”英语单词,并提供一个英文字典 2)返回英文单词列表作为数组使用Java中的arraylist查找字典中的四个连续字母,构建代码时出错

返回的单词是字典中与“源”单词相同的四个连续字母(或更多)的单词。例如,MATTER这个词在常见的ATTEND中有一行“ATTE”中有四个字母。

然而,该代码给我的错误与子

下面是供您参考的代码。

public class FourLetterInCommon { 


    static String wrd = "split"; 
    static String[] d = new String[]{"SPLITS", "SPLITTED", "SPLITTER", "SPLITTERS", "SPLITTING", "SPLITTINGS", "SPLITTISM", "SPLITTISMS", "SPLITTIST", "SPLITTISTS"}; 

    public static void main(String[] args){ 
     System.out.println(fourletters (wrd, d)); 
    } 

    public static List<String> fourletters (String word, String[] dict){ 
     int dictsize = dict.length; 
     int wordlength = word.length(); 

     List<String> Commonletters = new ArrayList<String>(); 

     for(int i = 0; i<=dictsize; i++) { 
      for (int j=0; j<=wordlength;) { 

       if(dict[i].contains(word.substring(i, 5))) 
       { 
        Commonletters.add(dict[i]); 
       } 

       break; 
      } 

     } 
     return Commonletters; 
    } 
} 

这是错误消息我得到:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(Unknown Source) at FourLetterInCommon.fourletters(FourLetterInCommon.java:22) at FourLetterInCommon.main(FourLetterInCommon.java:10) 

是什么错误呢?道歉,但在这个阶段有点无知。

+0

此代码给我一个(dict [i] .contains(word.substring(i,4))) Commonletters.add(dict [i]);如果不明确, } –

+0

和错误是... –

+0

异常线程 “main” java.lang.StringIndexOutOfBoundsException:在FourLetterInCommon -1 \t在java.lang.String.substring(来源不明) \t:字符串索引超出范围。 (FourLetterInCommon.java:22) \t at FourLetterInCommon.main(FourLetterInCommon.java:10) –

回答

2

不少问题:

如果要检查一定数目的字符,那么你应该使用它。

1)

for(int i = 0; i<=dictsize; i++) { 

应该是

for(int i = 0; i<dictsize; i++) { 

2)

for (int j=0; j<=wordlength;) { 

应该是

for (int j=0; j<=wordlength-4; j++) { 

3)

if(dict[i].contains(word.substring(i, 5))) 

应该

if(dict[i].contains(word.substring(j, j+4))) 

4)

我不相信你真的想break;那里。我猜你想在你找到一场比赛时打破,所以它应该在if语句中。

更正代码:

public class FourLetterInCommon 
{ 
    static String wrd = "SPLIT"; 
    static String[] d = new String[] { "SPLITS", "SPLITTED", "SPLITTER", "SPLITTERS", "SPLITTING", "SPLITTINGS", 
      "SPLITTISM", "SPLITTISMS", "SPLITTIST", "SPLITTISTS" }; 

    public static void main(String[] args) 
    { 
     System.out.println(fourletters(wrd, d)); 
    } 

    public static List<String> fourletters(String word, String[] dict) 
    { 
     int dictsize = dict.length; 
     int wordlength = word.length(); 

     List<String> Commonletters = new ArrayList<String>(); 

     for (int i = 0; i < dictsize; i++) 
     { 
      for (int j = 0; j <= wordlength - 4; j++) 
      { 
       if (dict[i].contains(word.substring(j, j + 4))) 
       { 
        Commonletters.add(dict[i]); 
        break; 
       } 
      } 
     } 
     return Commonletters; 
    } 
} 

输出:

[SPLITS,分裂,SPLITTER,分路器,分裂,分裂,分裂,SPLITTISMS,分裂,分裂]

+0

我试过,但作为输出,我得到的只是这个:[] - 只是方括号 –

+0

[]表示一个空的列表。让我编辑答案以列出完整的代码。 – SirRaffleBuffle

+0

非常感谢 –

0

下面一行将引发Exception

if(dict[i].contains(word.substring(i, 5))) 

这里,i范围从0dict.length即10在这种情况下。 word仅包含5个字符。因此,访问索引5之后的任何字符将抛出一个Exception。这里

for (int j=0; j < wordlength;) { 
     if(dict[i].contains(word.substring(j, wordlength - j))) 
相关问题