在运行时分配数组的问题

时间:2014-03-25 16:37:59

标签: java

在运行时分配数组时遇到问题,这就是我的意思......

Scanner Scan = new Scanner(System.in);
int size;
int[] myarr = new int[size];
size = Scan.nextInt();

这里的问题是数组大小不会随时更新。

CLUE:这是I类的简化版本,它将数组的大小作为参数传递给构造函数,我无法在main中声明该数组。数组需要保留此类的属性。

4 个答案:

答案 0 :(得分:7)

更改此

Scanner Scan = new Scanner(System.in);
int size;
int[] myarr = new int[size];
size = Scan.nextInt();

Scanner scan = new Scanner(System.in);//variables in java starts with lower-case by convention
int size =scan.nextInt();
int[] myarr = new int[size];

请注意,数组是固定大小的,您无法在运行时以非传统方式更改大小而不创建新数组。

答案 1 :(得分:4)

你做的那一刻

int[] myarr = new int[size];

已声明变量size,但未初始化。您应该在之前将其初始化

Scanner Scan = new Scanner(System.in);
int size = Scan.nextInt();
int[] myarr = new int[size];

注意:

  • 创建数组myarr 后,其大小无法更改。如果要更改大小,可以创建具有所需大小的新数组,或使用其他结构,如ArrayList

答案 2 :(得分:1)

 Scanner Scan = new Scanner(System.in);
int size= Scan.nextInt();
int[] myarr = new int[size];

您在实例化数组后定义了大小。

答案 3 :(得分:0)

如果要非常频繁地调整字段大小,则很可能不希望使用数组,因为它无法调整大小。正如上面其中一条评论中所提到的,你可以使用ArrayList。然而,它仍然是一个List,它在内部是一个数组:即使你不需要处理它的大小 by手,JVM在内部执行 - 这可能会导致错误的运行时行为(仍然假设调整大小是您的首要任务)。

如果经常调整List的大小,您可能需要查看更多动态结构,例如LinkedList

但是,此决定始终取决于您将如何使用List以及您的主要目标。