当前位置: 首页 > 知识库问答 >
问题:

为什么我不能改变数组的长度?

王景山
2023-03-14

基本上,我试图用一个名为“a”的变量设置数组的长度,并将其声明为3和int。当我试图用for循环查看所有元素时,我不会将“null”作为元素。到现在为止,一直都还不错。然而,当有人想向该数组中添加一个元素时,我会向提到的变量“a”中添加1,从而延长该数组的长度,并允许我向该数组中再添加一个元素。但它不起作用。以下是代码:

public class Main {


public static void main(String[] args) {
    int a=3;
    String[] cars = new String [a];
    cars[0]= "Camaro";
    cars[1]= "corvet";
    cars[2]= "tesla";
    
    
    
    for(int i = 0; i<cars.length; i++) {
        System.out.println(cars[i]);
        
    }
    
    a= a+1;
    cars[3]="Honda";
    System.out.println(cars[3]);
    
    
}

}

共有3个答案

赖浩荡
2023-03-14

Java数组具有固定长度1。所述长度在运行时是必需的。可以使用动态集合(例如ArrayList)。也可以将阵列复制到新的更大阵列中。喜欢

String[] cars = { "Camaro", "corvet", "tesla" };
System.out.println(Arrays.toString(cars));
cars = Arrays.copyOf(cars, cars.length + 1);
cars[3] = "Honda";
System.out.println(Arrays.toString(cars));

Collection<String> cars = new ArrayList<>(
        Arrays.asList("Camaro", "corvet", "tesla"));
System.out.println(cars);
cars.add("Honda");
System.out.println(cars);

两个输出

[Camaro, corvet, tesla]
[Camaro, corvet, tesla, Honda]

1JLS 10.2。数组变量表示(部分)一旦创建了数组对象,其长度就不会改变。

姜卜霸
2023-03-14

数组在Java是固定长度的。声明后不能更改数组的长度。如果您想要增加长度的新数组,您应该创建新的数组并复制旧的内容。然而,在这种情况下,使用ArrayList将执行您想要的操作。代码如下:

ArrayList<String> cars = new ArrayList<>(); //Note that you don't provide any size
cars.add("camero");
cars.add("corvert");
cars.add("tesla");
cars.add("honda");

在这里,阵列将动态调整大小,您可以添加任意数量的内容。

如果仍然需要扩展阵列:

int a = 3;
//your code
a += 1;
String[] carsExtendedArray = new String[a];
for (int i = 0; i < cars.length; i++) {
   carsExtendedArray[i] = cars[i];
}
carsExtendedArray[4] = "honda";
彭阳荣
2023-03-14

除了正确声明“在Java,数组是固定长度的”的答案之外,你似乎误解了声明和赋值的确切含义。

int a=3;
String[] cars = new String [a];

这里有一个变量名为a,给定值为3。然后我们分配一个数组,其大小由a的当前值指定。就数组分配而言,效果与执行相同

new String[3];

数组和a之间没有关联。

因此,后续执行

a= a+1;

数组或除a本身的值以外的任何其他数据都没有影响。即使数组不是固定长度的(它们是固定长度的),更改独立整数变量也不会影响数组。

 类似资料:
  • 问题内容: 我知道React教程和文档毫无疑问地警告说,状态不应该直接变异,所有事情都应该通过。 我想了解一下,为什么我不能直接更改状态,然后(在同一函数中)仅调用来触发它。 例如:下面的代码似乎正常工作: 我全都遵循以下约定,但我想进一步加深对ReactJS实际工作方式的理解,以及可能出现问题的地方或上述代码的优缺点。 文档下的注释基本上标识了两个陷阱: 如果您直接更改状态,然后再调用它,则可能

  • 问题内容: 当我看到以下代码无法按预期工作时,我有些困惑。 我认为Java总是通过引用将变量传递给函数。因此,为什么函数不能重新分配变量? 该程序输出。 问题答案: 对对象的引用是通过Java中的 值 传递的,因此在方法内部分配给局部变量不会更改原始变量。仅局部变量指向新字符串。稍微了解一下ASCII艺术可能会更容易理解。 最初,您有: 首次输入方法setNotNull时,您 将在中 获得null

  • 问题内容: 我有这个代码: 为什么几次打印后会变成负片?如果超出范围,是否不应该发生错误? 问题答案: 如果将数字增加到最大值之后,Java不会抛出错误。如果您希望具有此行为,则可以使用Java 8中的方法。如果传递,则该方法将引发。 Java不会引发异常并且您收到负数的原因与数字的存储方式有关。对于长原语,第一个字节用于指示数字的符号(0->正号,1->负号),其余字节用于数字值。这意味着最大的

  • 我有下面的代码 我的期望是,若map中并没有值(数组),它将返回对新创建的数组的引用,我可以将我的“值”添加到该数组中。 然而,我看到myContext地图是空的。似乎超级基本,我不明白。

  • 让我从开普勒转到卢娜的其中一件事是,我可以有一个全食黑暗主题的promise。所以我已经安装了MoonRise UI主题,但是当我转到窗口->通用->外观来最终更改主题时,我得到了一个奇妙的灰色区域,锁定在“高对比度”上: 我还从Eclipse Marketplace上安装了“主题”插件,一切似乎都很好,除了事实是它不是,我在谷歌上搜索了它,每个人似乎都对自己的黑暗主题很满意,但我不喜欢它。 那么

  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严