出现了这个问题: java.lang.ArrayIndexOutOfBoundsException: 4 想问一下怎么解决?

publicvoidsave(intnumber1,inti)throwsIOException{//读取储存位置的文件//建立一个输入流对象readInputStrea... public void save(int number1,int i) throws IOException{
//读取储存位置的文件
//建立一个输入流对象read
InputStreamReader read=new InputStreamReader(new FileInputStream("D:\\test.txt"));
//建立一个对象,它把文件内容转化为计算机能读懂的
BufferedReader br=new BufferedReader(read);
String[][] user=new String[3][];
for(int j=0;j<3;j++) {
//将文件中按行读出,再通过空格分开存放在数组中
user[j] =(br.readLine()).split(" ");
}
//将文件中的登陆者的余额从字符串转化成数字
System.out.println("余额:"+user[i][4]);
int number2=Integer.parseInt(user[i][4]);
//将数字相加
int number=number1+number2;
//将最后总的数字转化成字符串
String newstr=String.valueOf(number);

//改变文件的内容
File file=new File("D:\\test.txt");
RandomAccessFile fr=null;
try {
fr=new RandomAccessFile(file,"rw");
String line=null;
long lastPoint=0;//记住上一次的偏移量
while ((line = fr.readLine()) != null) {
final long ponit = fr.getFilePointer();
if(line.contains(user[i][4])){
//contains判断是否有包含的关系
String str=line.replace(user[i][4], newstr);
fr.seek(lastPoint);
fr.writeBytes(str);
}
lastPoint = ponit;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在软件上没有提示错误
展开
 我来答
貌似風輕
2018-06-09 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:692万
展开全部

你用代码读取了 test.txt中前3行字符串,并用空格分割后保存到String数组中。

报这个错的直接原因是test.txt的前3行中至少有一个行的空格数少于4个,最终导致数组下标越界。

你在代码中使用了  user[i][4]

user数组的赋值是

user[j] = (br.readLine()).split(" ");

如果br.readLine()读取到的字符串中空格不够,比如读到的是“a b c”,那么split之后的结果user[j] 中存储的是["a","b","c"],它的数组长度是3,下标最大到2,这种情况你取下标4就肯定会报下标越界的错的。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式