class SafeArray
{
private int[] arr;
public SafeArray()
{
arr=new int[10];
}
public SafeArray(int length)
{
arr=new int[length];
}
public int getLength()
{
return arr.length;
}
public void setArray(int i,int index)
{
if(index>arr.length||index<0)
{
System.err.print("索引错误!");
return;
}
else
arr[index]=i;
}
public int getArray(int index)
{
if(index>=arr.length||index<0)
  {
System.err.print("索引错误!");
return 0;
  }
  else
   return arr[index];
}
public void ShowAll()
{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+"  ");
}
}
}public class UseConstructor
{
public static void main(String[] args)
{
SafeArray arr1=new SafeArray();
SafeArray arr2=new SafeArray(20);
for(int i=0;i<arr1.getLength();i++)
{
arr1.setArray((i+1)*10,i);
}
System.out.print("arr1:  ");
arr1.ShowAll();
System.out.println("");
for(int i=0;i<arr2.getLength();i++)
{
arr2.setArray((i+1)*10,i);
}
System.out.print("arr2:  ");
arr2.ShowAll();
System.out.println("");
System.out.println("索引21的数字是:  "+arr2.getArray(21));
}
}
运行后显示"索引错误!索引21的的数字是0"  但是getArray里不加return 0;编译不通过 有没有什么办法?

解决方案 »

  1.   

    不知道你想要的究竟是什么,程序调用getArray方法的时候是传过去参数的,当穿过去的参数为21的时候大于arr的长度,自然是要输出“索引错误”字样的。
    至于说的不想返回值的话就将方法int改为void,这样就不需要返回值了。
      

  2.   

    运行后显示"索引错误!索引21的的数字是0"  但是getArray里不加return 0;编译不通过 有没有什么办法?
    1 数组是从0开始的 所以没有21(数组越界)只有0到20
    2 不想return(返回)把 public int getArray(int index) 中的int改为void
      

  3.   

    可以将return 0; 改成
    throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + arr.length);
      

  4.   

    我想要的是..这个函式有一个int类型的返回值,但例如当输入索引21大于数组长度时输出结果不要显示0 不然会以为arr[21]是0,但是又不能去掉return 0,有没有办法去掉return 0编译又通过的...
    谢谢3楼的  不过我还没学到丢出例外...