我们的任务快速概述: 用户需要输入收到的成绩。我们不知道用户需要输入多少等级。如果用户输入“-1”,那就是当我们知道用户输入成绩时。
问题是如何使用计数器并在同一循环中为数组赋值?我宁愿不必要求用户输入两次所有值(一次获得数组大小,第二次将分数分配给索引位置)。
我们的教授给了我们一份讲义,告诉我们基本上猜测阵列的大小并希望最好。我拒绝相信这是唯一的解决方案。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
你不能在java中制作动态数组。
为此,您必须使用List
或ArrayList
。
我们必须在应用程序运行之前或编码时提供数组的大小,而arrayList使我们能够在需要时添加数据,因此当我们添加数据时它的大小会自动增加。
示例:
import java.util.*;
public class ArrayListDemo {
public static void main(String args[]) {
// create an array list
ArrayList al = new ArrayList();
System.out.println("Initial size of al: " + al.size());
// add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
al.add(1, "A2");
System.out.println("Size of al after additions: " + al.size());
// display the array list
System.out.println("Contents of al: " + al);
// Remove elements from the array list
al.remove("F");
al.remove(2);
System.out.println("Size of al after deletions: " + al.size());
System.out.println("Contents of al: " + al);
}
}
此示例来自here.
更新:
将列表定义为:
List myList = new ArrayList();
您只能调用属于List类的方法和引用成员。如果您将其定义为:
ArrayList myList = new ArrayList();
除了从List继承的成员之外,您还可以调用特定于ArrayList的方法并使用特定于ArrayList的成员。
列表不是一个类,它是一个接口。它没有实现任何方法。因此,如果在List引用上调用方法,实际上在两种情况下都调用了ArrayList的方法。
答案 1 :(得分:1)
使用某种List
是一个更好的选择,因为它基本上可以做你想要的(可以增长和缩小),事实上,ArrayList
只是一个动态数组。
如果您使用System.arraycopy
List
,则可以手动滚动自己
例如,这会增大或缩小数组以匹配您提供的大小......
public String[] updateArray(String[] src, int size) {
String[] dest = new String[size];
if (size > src.length) {
System.arraycopy(src, 0, dest, 0, src.length);
} else {
System.arraycopy(src, 0, dest, 0, size);
}
return dest;
}
再次...... List
更容易......
答案 2 :(得分:0)
构建动态数组涉及以下基本步骤:
- 创建一个固定容量的数组。
- 当数组的大小(添加的元素数)接近容量时,创建一个新数组(通常使容量加倍),并将所有旧元素复制到新数组。
链接列表对于构建阵列的任务(在O(1)时间内完成)最有效。但是,访问链接列表中的插入和删除元素效率不高(O(n)时间)。想象一下,必须遍历整个列表才能到达最后一个元素。构建动态数组效率较低,因为需要在数组增长时重新调整数组大小。插入和删除元素的效率较低,因为需要移动所有元素以腾出空间或填补空白。但是访问数组中的元素是有效的(O(1)时间),并且在排序方面有很大的优势。
Java ArrayList是动态数组的实现。你也可以实现自己的。
答案 3 :(得分:0)
如果您不能使用ArrayList或任何类型的动态列表,那么一个解决方案就是:
StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(System.in);
int j;
while((j=scanner.nextInt()) !=-1){
sb.append(j + " ");
}
String []numbers = sb.toString().split(" ");
int[] grades = new int[numbers.length];
for(int i=0;i<numbers.length;i++){
grades[i] = Integer.parseInt(numbers[i]);
}
正如您所看到的,我将输入放在stringbuilder对象中,然后将其解析为字符串数组,并将该数组转换为整数数组。 我希望这会有所帮助。