class Arrary{
private int arrary[]=null;
private static int  foot;
Arrary(int num){
   if(num>0){arrary=new int[num];}
   else{arrary=new int[1];}
}
public boolean addnum(int num){
   if(foot<arrary.length){
   arrary[foot++]=num;
   return true;
   } else return false;
}
public int[] getdate(){
   return arrary;
}
public void increment(int len){
int []newarr= new int[this.arrary.length+len];
System.arraycopy(arrary, 0, newarr, 0, arrary.length);
arrary=newarr;

}}
class sort extends Arrary {
   sort(int num) {
super(num);
}
     public int[] getdate(){
       java.util.Arrays.sort(super.getdate());
       return super.getdate();
     }
}
 class reverse extends Arrary{
      
reverse(int num) {
super(num);
}
public int[] getdate(){
int head=0;
int tail=super.getdate().length-1;
while((head!=tail)&&((head+1)!=tail)){
 int t;
 t=super.getdate()[head];
 super.getdate()[head]=super.getdate()[tail];
 super.getdate()[tail]=t;
 head++;
 tail--;
 }
return super.getdate();
}
}
public class Arrarys { public static void main(String[] args) {
reverse a1=new reverse(4);

System.out.println(a1.addnum(11));
System.out.println(a1.addnum(2));
System.out.println(a1.addnum(12));
System.out.println(a1.addnum(22));
        for(int i=0;i<a1.getdate().length;i++){
         System.out.println(a1.getdate()[i]);
        }
}}写了一个将整型数组翻转的程序 为什么结果翻转不了呢?
求大神给新手解答~~

解决方案 »

  1.   

    个人看法:
    每次调用getdate(),返回一个数组。对这个数组的操作,并不影响原数组。
    建议改下:
    class reverse extends Arrary
    {
    reverse(int num) 
    {
    super(num);
    }
    public int[] getdate()
    {
    int head=0;
    int[] temp=super.getdate();         //temp 是返回的数组,一个新的数组。
    int tail=temp.length-1;             //下面都是对这个数组操作。
    while((head!=tail)&&((head+1)!=tail))
    {
    int t;
    t=temp[head];
    temp[head]=temp[tail];
    temp[tail]=t;
    head++;
    tail--;
    }
    return temp;             //返回已经反序的数组。
    }
    }
    public class Arrarys { public static void main(String[] args) 
    {
    reverse a1=new reverse(4);

    System.out.println(a1.addnum(11));
    System.out.println(a1.addnum(2));
    System.out.println(a1.addnum(12));
    System.out.println(a1.addnum(22));
    int[] temp1=a1.getdate();              //这块道理一样。
    for(int i=0;i<temp1.length;i++)
    {
           System.out.println(temp1[i]);
           }
    }
    }
      

  2.   

    解决方法和楼上的一样,但是我觉得楼上解释的有点不对。
     for(int i=0;i<a1.getdate().length;i++){
      System.out.println(a1.getdate()[i]);
      }我认为上面这段代码其实是反转了两次,所以导致反转失败。
    即在i<a1.getdate().length时已经执行了以此数组反转,
    在System.out.println(a1.getdate()[i]);
    时又进行了以此反转,反反得正,导致输出的结果和原数组一样。
    不知正确与否,请高手指正。第一次回答问题,一下哈!