日期:2014-05-20  浏览次数:20825 次

一个算法题,提交出现RuntimeError 。
描述 现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No。
import java.util.*;
import java.io.*;
public class Test2 {
public static void main(String []args){
Scanner i = new Scanner(System.in);
int a=i.nextInt();
String c[] = new String[5];
if(0<a&&a<=100){
for(int k=1;k<=a;k++){
Scanner s = new Scanner(System.in);
String st=s.nextLine();
c[k]=st;
}
}
for(int k=1;k<=a;k++){
String st1 =c[k].valueOf(c[k]);
if(st1!="["||st1!="]"||st1!="("||st1!=")")
break;
if(st1.length()>10000&&st1==null) break;
StringBuffer  sb= new StringBuffer(st1);
if(!sb.reverse().toString().equals(st1))
System.out.println("Yes");
else
System.out.println("No");
}
}
}

------解决方案--------------------
首先,报错是:
 java.lang.ArrayIndexOutOfBoundsException: 5
而不是RunTime。
错误原因很简单
for(int k=1;k<=a;k++){
Scanner s = new Scanner(System.in);
String st=s.nextLine();
c[k]=st;
}
c的长度是5,那么数组最大值就是c[4],那么如果我输入的a=50,那么k就会加到50,肯定报错数组越界了。