有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在自学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。给马克斯起名,狗1。给贝拉和狗起名。我叫杰克

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

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

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

附言:如果是重复的,我很抱歉。最后的方括号是我的问题的关键,搜索引擎忽略了“]”,无论是在这里还是在谷歌。我正在搜索关于“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;
}

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


共 (2) 个答案

  1. # 1 楼答案

    1)将Dog数组声明出for循环

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

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

    错:

    Dog dog[i] = new Dog();
    

    正确:

    dog[i] = new Dog();
    
  2. # 2 楼答案

    必须在循环外声明一个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);
        }
    }
    

    顺便说一句:类的属性不应该是公共的。因此,您应该将名称设置为私有,并添加getter和setter来访问该属性

    编辑 这不能在循环中完成,也没有多大意义

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

    public static class Dog {
    
       private String name;
    
       public Dog(String name){
           this.name = name
       }
    
       //getter and setter
       ....
    }
    

    所以你可以这样称呼它:

    Dog dog1 = new Dog("Max");