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)
刚尝试使用数组和循环获得相同的结果,但失败了.
你必须声明一个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)