Java 另一个扩展计划是;这";关键词包括

Java 另一个扩展计划是;这";关键词包括,java,Java,我正在编写第二个程序,并决定尝试编写一个存储值的程序,然后允许在其他方法或在我的程序、其他类中调用这些值。然后我尝试用this.arguement语法添加所有这些值,但并没有成功 所有this.args都产生相同的错误,“错误:找不到符号”第39行 怎么了 class students { public void students() { String strgirl = "Jenna"; String strboy = "Tommy";

我正在编写第二个程序,并决定尝试编写一个存储值的程序,然后允许在其他方法或在我的程序、其他类中调用这些值。然后我尝试用this.arguement语法添加所有这些值,但并没有成功

所有this.args都产生相同的错误,“错误:找不到符号”第39行

怎么了

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”关键字,请参考:好的,但是,也许我被错误地教导了,但我认为课程中不能有直接的代码?我以为是类/方法/然后是代码。@Dont
String strgirl=“Jenna”不是真正的“代码”。这是一个带有初始值设定项的变量声明。如果你说
字符串strgirl;strgirl=“Jenna”第二条语句是赋值语句,它是不能直接出现在类中的代码。
class math extends students
{ 
    public double tommymath;
    public double jennamath;

    public void studentsmath()
    {
        tommymath = 88.49;
        jennamath = 91.15;
    }
}