2015-10-19 58 views
-1

我的代碼是爲了找到倍兩個字相交於普通的字母數,然後打印出兩個詞交叉,如果他們做跨錯誤。我收到關於我的索引越界

當我編譯它是好的,但是當我運行它,我得到一個錯誤。我知道這與我的索引超出範圍有關,但我不知道該怎麼辦。

public class Assg23 
{ 
    public static void main(String[] args) 
    { 

      String w1 = args[0]; 
      String w2 = args[1]; 

      int numberOfCrosses = 0; 

     int pos1 = 0; 
      int pos2 = 0; 


      for(int i=0; i < w1.length(); i++) 
      { 
       for(int j=0; j < w2.length(); j++) 
       { 
        if(w1.charAt(i) == w2.charAt(j)) 
        { 
         numberOfCrosses++; 
         crossesAt(w1, pos1, w2, pos2); 
         printCross(w1, pos1, w2, pos2); 
        } 
       } 
      } 

     if(numberOfCrosses == 0) 
     { 
      System.out.println("Words do not cross"); 
     } 
    } 

    private static boolean crossesAt(String w1, int pos1, String w2, int pos2) 
    { 
     if(w1.charAt(pos1) == w2.charAt(pos2)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

    } 

    private static void printCross(String w1, int pos1, String w2, int pos2) 
    { 
     for(int i=0; i < w1.length(); i++) 
     { 
      for(int j = 0; j < w2.length(); j++) 
      { 
       if(j == pos1) 
       { 
        System.out.print(w2.charAt(i)); 
       } 
       if(i == pos2) 
       { 
        System.out.print(w1.charAt(j)); 
       } 
       else 
       { 
        System.out.print(" "); 
       } 

      } 
     } 



    } 

我收到此錯誤:

59號線:是System.out.print(w2.charAt(I)); 第27行是:printCross(w1,pos1,w2,pos2);

x-10-250-57-156:csci1103 Katie$ java Assg23 lottery boat 
blotto a t Exception in thread "main" `java.lang.StringIndexOutOfBoundsException: String index out of range: 4` 
    at java.lang.String.charAt(String.java:658) 
    at Assg23.printCross(Assg23.java:59) 
    at Assg23.main(Assg23.java:27) 
+0

你想要的長度 - 1 – csmckelvey

回答

0

通過您的printCross算法進行跟蹤。

外環遍歷您的第一字符串的長度,W1 - (「彩票」),和您的內部循環迴路通過所述第二字符串的長度,W2 - (「舟」)。

一旦你的外循環的索引(i)大於字符串w2的長度,你不想訪問w2.charAt(i),這就是你在做的行System.out.print(w2.charAt(i));

這同樣適用於線System.out.print(w1.charAt(j));,但只有當j大於w1的長度(即,如果字符串w1比字符串w2短)時纔會出現問題。

我不能完全肯定,如果我明白你正在嘗試做的,但你可以實現一個簡單的檢查,像這樣:

if (j == pos1 && i < w2.length()) { ... } 
+0

但是,你會過得更好重新設計你的算法。布爾第二類:char' – jck

+0

我試圖編譯後您的建議@jck'不好操作類型的二元運算符「&&」第一類型時,現在收到這個錯誤。第二個操作數不應該是char。 – anderkat97

+0

檢查實施 – jck