2016-06-11 24 views
0

嘿傢伙你可以請你幫我的問題。我在線程獲得異常「主要」 java.lang.ArrayIndexOutOfBoundsException:3 在MainApp.main(MainApp.java:43)異常在線程「主」java.lang.ArrayIndexOutOfBoundsException:3當我改變沒有在我predermined設置它給錯誤

的問題是,當我在我的組數分配一定數量的程序可以正常運行,有些沒有會出現上述錯誤。

import java.util.*; 

public class MainApp { 

    public static void main (String [] args){ 

     //System.out.println("Enter your number?"); 

     //Scanner scn = new Scanner(System.in); 

     //declare array 
     String set[] = new String[3]; 


     set[0] = "2,9"; // change the number in this set some number give error while some do not have error 
     set[1] = "3,7"; 
     set[2] = "8,2"; 


     //store number in array set 
//  for(int i=0;i < 3;i++){ 
//   System.out.println("Input for " + i); 
//   set[i] = scn.nextLine(); 
//   
//  } 

     //determine whether it is transitive or not 
     int a = 0; 
     int d = 0; 
     int b = 0 ; 

     for(int i =0 ;i<3 || d == -1 ;i++) 
     { 

      for(int j= 0 ;j<3 || d == -1 ;j++) 
      { 
       a= 0 ; 

       if (i == j) 
        a = 2 ; 

       else if(set[i].charAt(2) == set[j].charAt(0)) //this line that returned error 
        for(int k =0 ;k<3 ;k++) 
        { 
         if (set[k].charAt(0)==set[i].charAt(0) && set[k].charAt(2)==set[j].charAt(2)) 
         { 
          a= 1; 
          b++ ; 
         } 

        } 
       else 
        a = 2 ; 

       if(a== 0) 
        d= -1 ; 


      } 


     } 

     if(b == 0 || d == -1) 
      System.out.println("Invalid"); 
     else 
      System.out.println("Valid"); 

      System.out.println("***********************************************************"); 
      //reflexive 
      //cnt used to determine whether all the no have their reflexive 
      //variable reflex is used to store value of set so that we can compare with set 
      //to determine whether the no in set got reflexive or not 
      //variable g is used to determine whether the no have reflexive or not 

      int cnt = 0 ; 
      int g = 0 ; 
      char reflex[] = new char[3*2]; 
      int t = 0 ; 

      //insert set value to reflex variable 
      for(int m= 0; m<3; m++) 
      { 
       reflex[t] = set[m].charAt(0); 
       t++ ; 
       reflex[t] = set[m].charAt(2); 
       t++ ; 
       } 

      //determine whether all of no have reflexive or not 
      for(int n=0 ; n<6 ;n++){ 
       g= 0 ; 
       for(int o=0 ; o<3 ;o++) 
        if(set[o].charAt(o) == reflex[n] && set[o].charAt(2) == reflex[n]) 
         g= 1 ; 
       if(g == 1) 
        cnt++ ; 

      } 

      if(cnt == 6) 
       System.out.println("Valid Bro"); 
      else 
       System.out.println("Invalid"); 



      System.out.println("***********************************************************"); 
      //symmetry 
      int u = 0 ; 
      int count = 0 ; 

      for(int r= 0 ;r<3 ;r++) 
      { 
       u = 0; 
       for(int s =0 ;s<3 ;s++) 
       { 
        if(set[s].charAt(0)== set[r].charAt(2) && set[s].charAt(2)== set[r].charAt(0)) 
         u= 1; 
       } 
       if(u==1) 
        count++ ; 
      } 

      if(count == 3) 
       System.out.println("Valid Bro"); 
      else 
       System.out.println("Invalid"); 

     } 

    } 
+0

我敢肯定的原因是,當J獲取的上述增加你的j循環甚至可以運行2,這意味着它稍後在代碼中嘗試訪問set [3],但該設置只有3個long,所以,0,1和2.您需要更改一些邏輯以適應該設置。與i循環相同。 – Vilsol

+0

設置一個斷點並遵循代碼。 –

回答

0

從我在你的代碼已經看到了,這似乎是有問題的行

for(int i =0 ;i<3 || d == -1 ;i++) 
      { 
       System.out.println("Outer Loop "+i); 


       for(int j= 0 ;j<3 || d == -1 ;j++) 
       { 

爲什麼要檢查我真的不知道如果j < 3 || d == - 1因爲當i = 2,j-2時發生了什麼。 d的值被設置爲-1,這意味着內部循環正在進行額外的迭代,這會導致異常。除非你真的需要檢查d == - 1去除一部分,它就像一個魅力,所以應該是

for(int i =0 ;i<3 ;i++) 
       { 
        System.out.println("Outer Loop "+i); 


        for(int j= 0 ;j<3 ;j++) 
        { 
相關問題