另一个扩展计划是"这个"包括关键字

时间:2014-03-29 01:21:12

标签: java

我正在制作我的第二个程序,并决定尝试创建一个存储值的程序,然后允许在其他方法或程序中调用它们,其他类。然后我尝试使用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);
    }
}

3 个答案:

答案 0 :(得分:0)

错误的是,您{.1}}尝试引用的所有变量都是局部变量。见http://www.coderanch.com/t/416862/java/java/Difference-Variable-Field

您需要做的是将声明放在主类主体中,并放在方法主体之外。

即,而不是

this

}

使用

class students {
public void students()
{
    String strgirl = "Jenna";
    String strboy = "Tommy";
}

答案 1 :(得分:0)

您在类tommyscience中的函数studentsscience()中声明变量sciencetommyscience仅在调用studentsscience()时存在,并在该函数完成时停止存在。 tommyscience' s scope仅限于该功能。

因此,尝试在averagetotal类中使用它是行不通的,因为关于averagetotal()构造函数的变量 tommyscience不相关存在。这与jennaenglishjennamathjennasciencetommyenglishtommymath的问题相同;

这就是您获得symbol not found编译错误的原因。

此外:

  • 你应该考虑大写班级名称
  • 需要消除void构造函数(以及所有类)之前的averagetotal()。这是合法的,但它不是你想要的。执行此操作时,将依次执行所有构造函数(实例化new averagetotal()将按以下顺序执行构造函数:averagetotal - > science - > english - > math - > students),但在修复变量范围问题之前,您仍然无法访问任何变量。
  • 你的班级没有州。除了内部函数之外,没有变量。例如,不要将String strgirl = "Jenna";放在函数中,而是将其放在函数之外,就在类的顶部(在public class行和students构造函数之间)。

还有一些更基本的问题,但这些较小的问题应该让你开始。

答案 2 :(得分:0)

正如已经指出的那样,您可以使用初始值设定项声明成员字段。但是,在构造函数中初始化它们可能更常见:

class math extends students
{ 
    public double tommymath;
    public double jennamath;

    public math()
    {
        tommymath = 88.49;
        jennamath = 91.15;
    }
}

math()是构造函数,因为它与类具有相同的名称。当你说new math()时,它会执行构造函数中的语句。关键是您在<{1}}和double之前 tommymath或任何其他类型名称放在构造函数中。如果你这样做,它将是一个同名的 new 局部变量,你不会初始化字段成员。

还有一件事:你编写它的方式,你写了一个方法而不是构造函数:

jennamath

这是完全合法的,但现在您实际上必须调用 class math extends students { public double tommymath; public double jennamath; public void studentsmath() { tommymath = 88.49; jennamath = 91.15; } } 方法,以便初始化变量studentsmathtommymath。我在代码中的任何地方都没有看到jennamath被调用的地方。所以你可能会以0结束,而不是88.49或91.15。