出现了这个问题: 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();
}
}
}
在软件上没有提示错误 展开
//读取储存位置的文件
//建立一个输入流对象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();
}
}
}
在软件上没有提示错误 展开
1个回答
展开全部
你用代码读取了 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就肯定会报下标越界的错的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询