杭电ACM1002用java写的,麻烦高手看一下哪里错了,在线

寂寞灵魂 2012-09-05 09:07:21
大体是用二维数组写的,报错Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: -1
at java.lang.String.substring(Unknown Source)
at ACM1002.main(ACM1002.java:16)
麻烦看一下,在线等...
import java.util.Scanner;

public class ACM1003{

public static void main(String[]args){

Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
String s[][] = new String[i][2];
int j[][] = new int[1][2];

for(int m=0;m<i;m++){

String s2 = scan.next();
int e = s2.indexOf(' ');
s[m][0] = s2.substring(0,e);
s[m][1] = s2.substring(e);

j[m][0] = Integer.parseInt(s[m][0]);
j[m][1] = Integer.parseInt(s[m][1]);

}


for(int n=1;n<=i;n++){

System.out.println("Case " + n +":");
System.out.println(j[n][0] + " + " + j[n][1] + " = " + (j[n][0] + j[n][1]));
System.out.println();

}


}

}
...全文
165 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
一脸辣椒 2012-09-06
  • 打赏
  • 举报
回复
这个应该是下标越界的报错吧。
寂寞灵魂 2012-09-06
  • 打赏
  • 举报
回复
多谢了
comet_fly 2012-09-05
  • 打赏
  • 举报
回复
通过scanner.next方法获取到的是 查找并返回来自此扫描器的下一个完整标记
所以你获得的只能是一个完整的字符串不会带有' ',所以s2.indexOf(' ') 的返回值只能是-1

而对于这个而言 s2.substring(0,e);
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。

所以报错了

以上个人见解
寂寞灵魂 2012-09-05
  • 打赏
  • 举报
回复
是这一行:s[m][0] = s2.substring(0,e);
wsyangzuda 2012-09-05
  • 打赏
  • 举报
回复
这段代码报错 第16行,是指哪一行?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧