在带有数组的循环中创建变量时出现Java编译错误

在带有数组的循环中创建变量时出现Java编译错误,java,arrays,loops,Java,Arrays,Loops,我正在自学Java,目前正在学习数组。 我试着用一些相当简单的东西来练习 public static void main(String[] args) { String[] names = {Max, Bella, Jack}; for (int i = 0; i < names.length; i++) { Dog dog[i] = new Dog(); dog[i].name = names[i]; System.out

我正在自学Java,目前正在学习数组。 我试着用一些相当简单的东西来练习

public static void main(String[] args) {

    String[] names = {Max, Bella, Jack};
    for (int i = 0; i < names.length; i++) {
        Dog dog[i] = new Dog();
        dog[i].name = names[i];
        System.out.println(dog[i].name);
    }
}

public static class Dog {
    public String name;
}
我就是搞不懂发生了什么事?结束方括号就在那里,但编译器告诉我它需要它,就像它不存在一样。我可能用数组和循环创建变量是错误的,如果是,请告诉我正确的方法

附言:如果是重复的,我很抱歉。最后的方括号是我的问题的关键,搜索引擎忽略了“]”,无论是在这里还是在谷歌。我正在搜索关于“expected']'”的线程,但它只提供“expected”的结果

编辑:我可能说得不够清楚。我想做的是编写一个代码,它将等于以下内容:

public static void main(String[] args) {

    Dog dog0 = new Dog();
    dog0.name = "Max";
    Dog dog1 = new Dog();
    dog1.name = "Bella";
    Dog dog2 = new Dog();
    dog2.name = "Jack";
    }
}

public static class Dog {
    public String name;
}

刚刚尝试使用数组和循环获得相同的结果,但失败。

您必须在循环之外声明一个
Dog
数组:

Dog[] dog = new Dog[names.length];
dog[i] = new Dog();
并在循环内设置特定索引的值:

Dog[] dog = new Dog[names.length];
dog[i] = new Dog();
因此,主要方法如下所示:

public static void main(String[] args) {

    String[] names = {Max, Bella, Jack};
    Dog[] dog = new Dog[names.length]; 
    for (int i = 0; i < names.length; i++) {
        dog[i] = new Dog();
        dog[i].name = names[i];
        System.out.println(dog[i].name);
    }
}
所以你可以这样称呼它:

Dog dog1 = new Dog("Max");
1) 声明Dog数组不在for循环中

Dog[] dog = new Dog[names.length];
2) 在设置索引值之前,请删除Dog类名称

错:

Dog dog[i] = new Dog();
正确:

dog[i] = new Dog();

你认为狗是什么意思?你知道数组是如何在Java中声明的吗?@UnholySheep这意味着创建一个Dog类的链接变量,它的名称将由静态部分“Dog”和循环当前迭代的数量组成。Java不支持动态变量命名(在几乎所有情况下,这都是一个非常糟糕的主意,因为它会使代码无法维护)。创建数组(或
ArrayList
Map
)是处理这种情况的正确方法。@ChristopherSchneider你是对的。谢谢你指出这一点。了解数组声明的要点,谢谢。但我不想创建一个Dog数组。我只想创建Dog类的3个对象。而不是创建它们的数组。将它们放入数组是必须的吗?@AndyMac那么你必须吃三种不同的东西,比如dog1,dog2,doc3@Jens这正是我想做的。我只是想也许我可以用一个循环来做这件事,并从一个名称数组中为它们取名称。@AndyMac不,你不能生成动态名称。另外,如果你在循环中创建它,名称空间也在这个循环中,并且在循环外不可见。comp我知道这个链接变量是Dog类的吗?这个类已经在数组创建中定义了。我们不必再次定义同一个类。