Java 另一个扩展计划是;这";关键词包括
我正在编写第二个程序,并决定尝试编写一个存储值的程序,然后允许在其他方法或在我的程序、其他类中调用这些值。然后我尝试用this.arguement语法添加所有这些值,但并没有成功 所有this.args都产生相同的错误,“错误:找不到符号”第39行 怎么了Java 另一个扩展计划是;这";关键词包括,java,Java,我正在编写第二个程序,并决定尝试编写一个存储值的程序,然后允许在其他方法或在我的程序、其他类中调用这些值。然后我尝试用this.arguement语法添加所有这些值,但并没有成功 所有this.args都产生相同的错误,“错误:找不到符号”第39行 怎么了 class students { public void students() { String strgirl = "Jenna"; String strboy = "Tommy";
class students
{
public void students()
{
String strgirl = "Jenna";
String strboy = "Tommy";
}
}
class math extends students
{
public void studentsmath()
{
double tommymath = 88.49;
double jennamath = 91.15;
}
}
class english extends math
{
public void studentsenglish()
{
double tommyenglish = 91.5;
double jennaenglish = 89.18;
}
}
class science extends english
{
public void studentsscience()
{
double tommyscience = 70.11;
double jennascience = 96.1;
}
}
class averagetotal extends science
{
public void averagetotal()
{
double total;
this.tommymath + this.jennamath + this.tommyenglish + this.jennaenglish + this.tommyscience + this.jennascience = total;
System.out.println(total);
double average;
average = (total / 6);
}
}
错误的是,您试图通过
this
引用的所有变量都是局部变量。看
您需要做的是将声明放在主类主体和方法主体之外
i、 而不是
class students {
public void students()
{
String strgirl = "Jenna";
String strboy = "Tommy";
}
}
使用
您正在class
science
中的函数studentsscience()
中声明变量tommyscience
tommyscience
仅在调用studentsscience()
时存在,并在该函数完成时停止存在tommyscience
仅对该函数是本地的
因此,尝试在averagetotal
类中使用它是无法工作的,因为就averagetotal()
构造函数而言tommyscience
不存在该变量。这与jennaenglish
、jennamath
、jennascience
、tommyenglish
和tommymath
的问题相同
这就是为什么出现符号未找到
编译器错误的原因
此外:
-
你应该考虑用大写字母类名。
- 需要消除
构造函数(在所有类中)之前的averagetotal()
。这是合法的,但不是你想要的。执行此操作时,将依次执行所有构造函数(实例化void
将按以下顺序执行构造函数:new averagetotal()
->averagetotal
->science
->english
->math
),但在解决变量范围问题之前,您仍然无法访问所需的任何变量students
- 您的类没有状态。除了函数内部,没有变量。例如,不要将字符串strgirl=“Jenna”在函数中,将其放在函数之外,就在类的顶部(在
行和公共类
构造函数之间)学生
还有一些更基本的问题,但这些较小的问题应该让您开始。正如已经指出的,您可以使用初始值设定项声明成员字段。在构造函数中初始化它们可能更常见,不过:
class math extends students
{
public double tommymath;
public double jennamath;
public math()
{
tommymath = 88.49;
jennamath = 91.15;
}
}
math()
是一个构造函数,因为它与类具有相同的名称。当您说newmath()
时,它将执行构造函数中的语句。关键是不要在构造函数中的tommymath
和jennamath
之前放置单词double
或任何其他类型名称。如果您这样做了,它将是一个具有相同名称的新局部变量,并且您不会初始化字段成员
还有一件事:按照您编写的方式,您编写了一个方法而不是构造函数:
class math extends students
{
public double tommymath;
public double jennamath;
public void studentsmath()
{
tommymath = 88.49;
jennamath = 91.15;
}
}
这是完全合法的,但现在您实际上必须调用
studentsmath
方法才能初始化变量tommymath
和jennamath
。我在你的代码中没有看到studentsmath()的任何地方代码>已被调用。因此,您可能会得到0,而不是88.49或91.15。您的变量不是类字段。查找“范围”。对于“this”关键字,请参考:好的,但是,也许我被错误地教导了,但我认为课程中不能有直接的代码?我以为是类/方法/然后是代码。@DontString strgirl=“Jenna”代码>不是真正的“代码”。这是一个带有初始值设定项的变量声明。如果你说字符串strgirl;strgirl=“Jenna”代码>第二条语句是赋值语句,它是不能直接出现在类中的代码。
class math extends students
{
public double tommymath;
public double jennamath;
public void studentsmath()
{
tommymath = 88.49;
jennamath = 91.15;
}
}