JAVA数组的一个错误?

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:40:16
import java.io.*;
public class app10
{
public static void main(String args[])throws Exception
{String str=new String();
try{InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader in=new BufferedReader(isr);
String sdir="F:\\c";
String sfile;
File Fdir1=new File(sdir);
if(Fdir1.exists()&&Fdir1.isDirectory())
{
System.out.println("目录:"+sdir+"已经存在");
for(int i=0;i<=Fdir1.list().length;i++)
System.out.println((Fdir1.list())[i]);
File Fdir2=new File("F:\\c\\k");
if(!Fdir2.exists())
Fdir2.mkdir();
System.out.println();
System.out.println("建立新目录后的文件列表");
for(int i=0;i<=Fdir1.list().length;i++)
System.out.println((Fdir1.list())[i]);
}

循环出错,下标溢出,改为:
if(Fdir1.exists()&&Fdir1.isDirectory())
{
System.out.println("目录:"+sdir+"已经存在");
//i是不能等于Fdir1.list().length的,不然数组下标溢出,下同
for(int i=0;i<Fdir1.list().length;i++)
System.out.println((Fdir1.list())[i]);
File Fdir2=new File("F:\\c\\k");
if(!Fdir2.exists())
Fdir2.mkdir();
System.out.println();
System.out.println("建立新目录后的文件列表");
for(int i=0;i<Fdir1.list().length;i++)
System.out.println((Fdir1.list())[i]);
}

你的两个for循环都存在下标界限的错误,循环的起始值是0,终止值应该是Fdir1.list().length-1,所以for循环应该写成:
for(int i=0;i<Fdir1.list().length;i++)

打印出错误的原因是因为你数组下标越界,越界的原因是因为你i是从0开始的,那么i的范围只能小于Fdir1.list().length()了,数组的下标是从0开始的,下标的范围在0和Fdir1.list().length-1 之间