新手程序求教

collmeaaa 2012-08-16 11:06:10
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]);
}


}

}



写了一个将整型数组翻转的程序 为什么结果翻转不了呢?
求大神给新手解答~~
...全文
112 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2012-08-17
  • 打赏
  • 举报
回复
个人看法:
每次调用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]);
}
}
}

nmyangym 2012-08-17
  • 打赏
  • 举报
回复
抱歉,1楼解释有错误. 正如二楼所说.
返回的数组还是原来的数组! 请楼主不要受我误导!
聪头 2012-08-17
  • 打赏
  • 举报
回复
好像是二楼说的。
心有阳光 2012-08-17
  • 打赏
  • 举报
回复
解决方法和楼上的一样,但是我觉得楼上解释的有点不对。
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]);
时又进行了以此反转,反反得正,导致输出的结果和原数组一样。
不知正确与否,请高手指正。第一次回答问题,mark一下哈!

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧