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

时间:2017-08-10 13:07:10

标签: 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;
}

我的想法是它会创建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();
                 ^

我无法弄清楚,发生了什么?关闭的方括号就在那里,然而编译器告诉我它期望它,就像它不存在一样。我可能用数组和循环错误创建变量,如果是这样,请指出我的正确方法。

P.S。:对不起,如果它是重复的话。关闭方括号是我的问题的关键点,搜索引擎只是忽略了这里和谷歌中的&#39;]&#39;我正在搜索关于&#34;期待&#39;&#39;&#34;&#34;的线索,但它只给了我&#34;期望&#34;的结果。

编辑:我可能没有让自己清楚。我试图做的是编写一个代码,它等于下面的代码:

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;
}

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

2 个答案:

答案 0 :(得分:9)

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

Dog[] dog = new Dog[names.length];

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

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);
    }
}

BTW:一个类的属性不应该是公共的。因此,您应该将Name设为私有,并将getter和setter添加到Access属性

修改 这不可能在一个循环中完成,并没有多大意义。

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

public static class Dog {

   private String name;

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

   //getter and setter
   ....
}

所以你可以这样称呼:

Dog dog1 = new Dog("Max");

答案 1 :(得分:0)

1)在for循环中声明Dog数组。

Dog[] dog = new Dog[names.length];

2)在设置索引值之前删除Dog类名称。

错误:

Dog dog[i] = new Dog();

正确的:

dog[i] = new Dog();