黑马程序员技术交流社区

标题: 数组越界? [打印本页]

作者: 冷漠无天    时间: 2013-11-23 16:30
标题: 数组越界?
请各位看下我的程序,为什么老是说出现数组越界的问题
实现的功能是将一个字符串拆成int型的数组。谢谢啦。
public class E {
public static void main(String args[]){
  int[][] a;
  String s = "1,2,3;4,5;6,7,8";
  String[] sfirst = s.split(";");
  a = new int[sfirst.length][];
  for(int i=0;i<sfirst.length;i++){
   String[] ssecond = sfirst.split(",");  
   for(int j=0;j<=ssecond.length;j++){
    a = new int[ssecond.length];
    a[j] = Integer.parseInt(ssecond[j]);
   }   
  }
  for(int i=0;i<=a.length;i++){
   for(int j=0;j<=a.length;j++){
    System.out.print(a[j]+" ");
   }
   System.out.println();
  }  
}
}
作者: 还不到时候    时间: 2013-11-23 17:33
for(int j=0;j<=ssecond.length;j++){
这一行的循环判断语句有问题

作者: 吴琼cola    时间: 2013-11-23 17:51
本帖最后由 吴琼cola 于 2013-11-23 17:53 编辑

1.for(int i=0;i<sfirst.length;i++) 问题出在这里,sfrist的长度为2,用<数组只能循环两次,String s = "1,2,3;4,5;6,7,8";你的字符串切割成3段,你循环两次只能操作1,2,3;4,5,后面的6,7,8就漏掉了。应该用<=。如:.for(int i=0;i<=sfirst.length;i++)  
2. String[] ssecond = sfirst.split(",");   这一句一定要写在循环外,不要循环一次,就赋值一次,这样效率很低。

作者: 还不到时候    时间: 2013-11-24 08:50
还不到时候 发表于 2013-11-23 17:33
for(int j=0;j

数组ssecond的角标会越界,ssecond[j]中的j会取到ssecond.length,这不就越界了吗?顺便补充下:
对于你的需求,我想有种方法会更合适。
public class E{
    public static void main(String args[])){
          String s = "1,2,3;4,5;6,7,8";
          String[] strs = s.spilt("[,?;?]");
          int [] arr = new int[strs.length];
          for(int i =0;i<strs.length;i++){
               int value = Integer.parseInt(strs);
               arr = value;
          }



   }
}

作者: 还不到时候    时间: 2013-11-24 08:52
还不到时候 发表于 2013-11-24 08:50
数组ssecond的角标会越界,ssecond[j]中的j会取到ssecond.length,这不就越界了吗?顺便补充下:
对于你的 ...

最后两行写错了:
int value = Integer.parseInt(str);
arr = value;
作者: 还不到时候    时间: 2013-11-24 08:54
还不到时候 发表于 2013-11-24 08:52
最后两行写错了:
int value = Integer.parseInt(str);
arr = value;

int value = Integet.parseInt(strs【i】);
arr【i】= value;
作者: 冷漠无天    时间: 2013-11-24 09:44
大哥啊我是问题攒在一起发表的不喜欢一个个发表,这样也不对啦?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2