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