在运行时分配数组时遇到问题,这就是我的意思......
Scanner Scan = new Scanner(System.in);
int size;
int[] myarr = new int[size];
size = Scan.nextInt();
这里的问题是数组大小不会随时更新。
CLUE:这是I类的简化版本,它将数组的大小作为参数传递给构造函数,我无法在main中声明该数组。数组需要保留此类的属性。
答案 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
以及您的主要目标。