[英]I keep getting “error: cannot find symbol” when trying to do constructor chaining
So this is the part of my code that contains the constructors.所以这是我的代码中包含构造函数的部分。 As you can see, the purpose is to have the constructors take in less parameters and call the most specific constructors.
如您所见,目的是让构造函数接受更少的参数并调用最具体的构造函数。 I thought I initiated my values in the first constructor.
我以为我在第一个构造函数中启动了我的值。 Why can it not find my symbol?
为什么找不到我的符号?
Here my code:这是我的代码:
public class Frog{
// instance variables
private String name;
private int age;
private double tongueSpeed;
private boolean isFrogLet;
private String species;
**// Third constructor**
public Frog( String Name){
this(Name, Age, TongueSpeed, IsFrogLet, Species);
}
**//second constructor**
public Frog(String Name, int ageInYears, double TongueSpeed){
this(Name, Age, TongueSpeed, IsFrogLet, Species);
name= Name;
age = ageInYears;
tongueSpeed= TongueSpeed;
}
**// most specific constructor**
public Frog( String Name, int age, double TongueSpeed, boolean IsFrogLet, String Species){
name = Name;
this.age = Age;
tongueSpeed = TongueSpeed;
isFrogLet= IsFrogLet;
species = Species;
}
public void grow(int months){
age = age + months;
while ( age < 12){
tongueSpeed++;
}
if (age>5 & age>30){
double highRes= age-30;
tongueSpeed= tongueSpeed-highRes;
}
if (age>1 & age <7){
isFrogLet = true;
}
}
}
-This is my error i'm getting: - 这是我得到的错误:
Frog.java:12: error: cannot find symbol
this(Name, Age, TongueSpeed, IsFrogLet, Species);
^
symbol: variable Age
location: class Frog
Frog.java:12: error: cannot find symbol
this(Name, Age, TongueSpeed, IsFrogLet, Species);
^
symbol: variable TongueSpeed
location: class Frog
Frog.java:12: error: cannot find symbol
this(Name, Age, TongueSpeed, IsFrogLet, Species);
^
symbol: variable IsFrogLet
location: class Frog
Frog.java:12: error: cannot find symbol
this(Name, Age, TongueSpeed, IsFrogLet, Species);
^
symbol: variable Species
location: class Frog
Frog.java:19: error: cannot find symbol
this(Name, Age, TongueSpeed, IsFrogLet, Species);
^
symbol: variable Age
location: class Frog
Frog.java:19: error: cannot find symbol
this(Name, Age, TongueSpeed, IsFrogLet, Species);
^
symbol: variable IsFrogLet
location: class Frog
Frog.java:19: error: cannot find symbol
this(Name, Age, TongueSpeed, IsFrogLet, Species);
^
symbol: variable Species
location: class Frog
Frog.java:28: error: cannot find symbol
this.age = Age;
^
symbol: variable Age
location: class Frog
I think you are getting the concept of constructor overloading wrong.我认为您对构造函数重载的概念有所误解。
**// Third constructor**
is taking in only name, but you are still trying to pass other stuff to this
. **// Third constructor**
只接受名称,但您仍在尝试将其他内容传递给this
。 You can't pass stuff if it does not exist.如果东西不存在,你就不能传递它。 So pass what comes from the parameters and set other stuff to
null
like so:因此,传递来自参数的内容并将其他内容设置为
null
,如下所示:
public Frog( String Name){
this(Name, 0, 0.0, false, null));
}
Same applies to other constructors.同样适用于其他构造函数。 See what the parameters of concrete constructors is and set other stuff to
null
.查看具体构造函数的参数是什么,并将其他内容设置为
null
。
the error is self-explanatory.该错误是不言自明的。 You are not creating variables with the specific names in your second and third constructor before passing them to the most specific constructor.
在将它们传递给最具体的构造函数之前,您不会在第二个和第三个构造函数中创建具有特定名称的变量。
You should pass either pass the exact variable that you receive in your constructor to the underlying constructor or you should pass some default values to the most specific constructor instead of these variables (aka symbols).您应该将您在构造函数中收到的确切变量传递给底层构造函数,或者您应该将一些默认值传递给最具体的构造函数,而不是这些变量(又名符号)。
so you should call your second and third constructors in the following ways:所以你应该通过以下方式调用你的第二个和第三个构造函数:
// Third constructor
public Frog(String Name) {
this(Name, 0, 0.0, false, "");
}
//second constructor
public Frog(String Name, int ageInYears, double TongueSpeed) {
this(Name, ageInYears, TongueSpeed, false, "");
}
Hope this helps希望这可以帮助
Error Cause
错误原因
You are using the non-existing variables as your instance-level are in camelCase no in title Case variables other than this please find refactored code and try to use camelCase for the variable您正在使用不存在的变量,因为您的实例级别在 camelCase 中没有在标题中除此之外的案例变量请查找重构代码并尝试使用 camelCase 作为变量
public class Frog {
private String name;
private int age;
private double tongueSpeed;
private boolean isFrogLet;
private String species;
public Frog(String name, int age, double tongueSpeed, boolean isFrogLet, String species) {
this.name = name;
this.age = age;
this.tongueSpeed = tongueSpeed;
this.isFrogLet = isFrogLet;
this.species = species;
}
public Frog(String name) {
this.name = name;
}
public Frog(String name, int ageInYears, double TongueSpeed) {
this.name = name;
this.age = ageInYears;
this.tongueSpeed = TongueSpeed;
}
public void grow(int months) {
age = age + months;
while (age < 12) {
tongueSpeed++;
}
if (age > 5 & age > 30) {
double highRes = age - 30;
tongueSpeed = tongueSpeed - highRes;
}
if (age > 1 & age < 7) {
isFrogLet = true;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.