求助关于数组初始化的问题

Autuming 2014-08-15 02:49:35
最近遇到了很多关于输入一些整数,把这些整数赋值给数组,输入以负数结束,这里面遇到的问题是,数组不知道长度,怎么初始化。希望大牛多多指点。
...全文
203 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Autuming 2014-08-17
  • 打赏
  • 举报
回复
总结一下上面:要么用ArrayList实现,要么自己修改一下ArrayList的源码。非常感谢!!!!
Autuming 2014-08-17
  • 打赏
  • 举报
回复
受益匪浅,一会一定自己实现
  • 打赏
  • 举报
回复
直接用ArrayList就可以了啊,ArrayList源代码

  public ArrayList(int initialCapacity) {
	super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
	this.elementData = new Object[initialCapacity];
    }

//有一个初始化大小,默认是10
 public ArrayList() {
	this(10);
    }

//当你要添加数据的时候,如果内容空间不够,会调用ensureCapacity进行扩容。
public boolean add(E e) {
	ensureCapacity(size + 1);  // Increments modCount!!
	elementData[size++] = e;
	return true;
    }
//会调用ensureCapacity方法进行扩容
  public void ensureCapacity(int minCapacity) {
	modCount++;
	int oldCapacity = elementData.length;
	if (minCapacity > oldCapacity) {
	    Object oldData[] = elementData;
	    int newCapacity = (oldCapacity * 3)/2 + 1;
    	    if (newCapacity < minCapacity)
		newCapacity = minCapacity;
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
	}
    }




nyxiaobin123 2014-08-15
  • 打赏
  • 举报
回复
引用 7 楼 blackspoon123 的回复:
引用 4 楼 shixitong 的回复:
动态数组ArrayList
+1
+1,然后直接toArray()就能得到数组类型了
漆黑之勺 2014-08-15
  • 打赏
  • 举报
回复
引用 4 楼 shixitong 的回复:
动态数组ArrayList
+1
yinan9 2014-08-15
  • 打赏
  • 举报
回复
同意楼上说的,可以使用List接口实现。 我用了一个笨办法,通过数组复制来实现。

import java.util.*;

public class ArrayTest {
	public static void main(String[] args){
		int[] a= new int[2];
		int[] b;
		Scanner scanner = new Scanner(System.in);
		int input =0;
		int i =0;
		while((input=scanner.nextInt())>=0){
			a[i]=input;
			i++;
			if(i==a.length){
				b= new int[a.length*2];
				System.arraycopy(a, 0, b, 0, a.length);
				a=b;
				System.out.println("length expands to "+a.length);
			}
		}
		
		System.out.printf("%d element(s) entered\n",i);
;
		if(i < a.length){
			int[] c = new int[i];
			System.arraycopy(a, 0, c, 0, i);
			a=c;
		}
		
		System.out.println("loop ended");
		for (int e : a)
		System.out.print(e+"\t");
		
	}

}
一大三千 2014-08-15
  • 打赏
  • 举报
回复
你可以使用List接口来解决这个问题,该接口下的子类ArrayList可以自动增容。整数的话可以这么声明: List<Integer> list = new ArrayList<Integer>()然后使用add()方法添加元素。
shixitong 2014-08-15
  • 打赏
  • 举报
回复
动态数组ArrayList
程序男 2014-08-15
  • 打赏
  • 举报
回复
你可以设定数组的最大值,比如int类型的封装类Integer有一个常量是最大值,你可以用这个值设为数组长度,因为现实中输入一些数不会超过这个常量的,比如; int array [] = new int [Integer.MAX_VALUE];
yinan9 2014-08-15
  • 打赏
  • 举报
回复
可以先初始化一个一定长度的数据比如 int[] a = new int[100]; 当接受的元素个数达到数组长度时,创建一个更大的数组,如 new int[200],将原来数组的元素复制过来。 以此反复。
jsshizhanab 2014-08-15
  • 打赏
  • 举报
回复
一定要用数组啊

62,620

社区成员

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

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