在使用数组的循环中创建变量时,Java编译错误

And*_*Mac -5 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.println(dog[i].name);
    }
}

public static class Dog {
    public String name;
}
Run Code Online (Sandbox Code Playgroud)

我的想法是它会创建3只狗(dog0,dog1和dog2),然后将dog0.name更改为Max,将dog1.name更改为Bella,将dog3.name更改为Jack.

但是,我收到以下编译错误:

/MyClass.java:6: error: ']' expected
        Dog dog[i] = new Dog();
                ^
/MyClass.java:6: error: illegal start of expression
        Dog dog[i] = new Dog();
                 ^
Run Code Online (Sandbox Code Playgroud)

我只是想不通,发生了什么事?关闭的方括号就在那里,但编译器告诉我它期望它,就像没有它一样.我可能正在使用数组和循环错误创建变量,如果是这样,请指出我的正确方法.

PS:如果这是重复的话,我很抱歉.关闭方括号是我的问题的关键点,搜索引擎只是忽略了这里和谷歌的']'.我正在搜索关于"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;
}
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*ens 9

你必须声明一个Dog循环外部的数组:

Dog[] dog = new Dog[names.length];
Run Code Online (Sandbox Code Playgroud)

并在Loop中设置特定索引的值:

dog[i] = new Dog();
Run Code Online (Sandbox Code Playgroud)

所以主要方法看起来像:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句:班级的属性不应该是公开的.因此,您应该将Name设为private,并将getter和setter添加到Access属性中

编辑 这不能在一个循环中完成并且没有多大意义.

更好的方法是使用Parameter Name创建一个构造函数,以便创建对象并在一行中添加Name属性:

public static class Dog {

   private String name;

   public Dog(String name){
       this.name = name
   }

   //getter and setter
   ....
}
Run Code Online (Sandbox Code Playgroud)

所以你可以这样称呼:

Dog dog1 = new Dog("Max");
Run Code Online (Sandbox Code Playgroud)