我已经从文件"file.txt"中获取了数组输入(第一个输入是数组的大小(4(,接下来的输入是我必须排序的数字(并对数组进行了排序,但现在我想在同一文件"file.txt"中打印排序后的数组a[I]
到目前为止,我已经做到了。。。。当我在控制台中通过从文件"file.txt"中获取数组输入来运行它时,它会正常运行,但当我想在同一文件中显示输出时,它说。。。数组越界异常我该怎么做??
Scanner sc = new Scanner(f1);
int [] a = new int[sc.nextInt()];
int i;
int j;
for(i=0;i<a.length;i++)
{
a[i] = sc.nextInt();
}
int temp=0;
for(i=0;i<a.length;i++)
{
for(j=0;j<a.length-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter pw = null;
try
{
fw = new FileWriter(f1,true);
bw = new BufferedWriter(fw);
pw = new PrintWriter(bw);
pw.println(a[i]);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
fw.close();
bw.close();
pw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
代码的问题在于您正在打印a[i]
。您使用以下代码:
for(i=0;i<a.length;i++)
在该循环之后,i
等于a.length
。然后在另一条线路上,你打电话给
pw.println(a[i]);
以在文件中输出。但现在i
指的是一个超出数组边界的元素。你必须像这样迭代输出:
BufferedWriter bw = null;
bw = new BufferedWriter(new FileWriter(f1));
for (int i = 0; i < a.length; i++) {
bw.write(Integer.toString(a[i]);
bw.newLine();
}
bw.flush();
bw.close();