| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 560 人关注过本帖
标题:数组问题?谢谢大家
只看楼主 加入收藏
wumingsx
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-3-10
收藏
 问题点数:0 回复次数:1 
数组问题?谢谢大家


//动态分配数组
public class TestArray{
static int index=4;
public static void main(String[] argv){
int a[]={1,2,3,4};
a=insert(a,2,5);
a=delete(a,3);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
System.out.println("index="+index);
}
//插入一个元素
static int[] insert(int[] a,int pos,int value){
if(index==a.length){
a=expand(a);
}
for(int i=index;i>=pos+1;i--){
a[i]=a[i-1];
}
a[pos]=value;
index++;
return a;
}
//扩充元素
static int[] expand(int[] a){
int[] b=new int[a.length*2];
System.arraycopy(a,0,b,0,a.length);
return b;
}
//删除元素
static int[] delete(int[] a,int pos){
for(int i=pos;i<=index-2;i++){
a[i]=a[i+1];
}
index--;
return a;
}
}


其中
//扩充元素
static int[] expand(int[] a){
int[] b=new int[a.length*2];
System.arraycopy(a,0,b,0,a.length);
return b;
}


b是一个函数内部的数组,局部的,能否返回,谢谢大家!!!!

搜索更多相关主题的帖子: public insert 
2006-04-06 22:51
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

当然是可以的,但是你这样做不一定保证处理一些不可预料的事情
比如,当a=insert(a,2,5);
改为a=insert(a,10,5);
那么你的程序就会出异常了:下标越界
原因主要出在
你是把index做为参数,其实不对,应该把你插入的位置做为参数
static int[] insert(int[] a,int pos,int value){
if(pos>=a.length){
System.out.println("进入");
a=expand(a,pos);
}
for(int i=index;i>=pos+1;i--){
a[i]=a[i-1];
}
a[pos]=value;
index++;
return a;
}
if(index==a.length){
a=expand(a);
}
这个条件是没有用的,不可能下标正好和a.length一样大才要去扩展,而是当下标等于大于a.length的时候就需要去扩展了。
所以应该改为
if(pos>=a.length){
a=expand(a,pos);//应该把pos做为参数传入,让expand知道应该扩展多大
}
这个时候,问题又来了
static int[] expand(int[] a){
int[] b=new int[a.length*2];
System.arraycopy(a,0,b,0,a.length);
return b;
}
你这个函数只是扩展了2倍而已,如果我给的那个下标很大呢,如果你还是扩展两倍的话,一样会出现下标越界异常 。
应该改为
static int[] expand(int[] a,int pos){
int[] b=new int[pos+10];//每次扩展都比最大的位置长10个
System.arraycopy(a,0,b,0,a.length);
return b;
}


可惜不是你,陪我到最后
2006-04-07 10:30
快速回复:数组问题?谢谢大家
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.010894 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved