我正在制作我的第二个程序,并决定尝试创建一个存储值的程序,然后允许在其他方法或程序中调用它们,其他类。然后我尝试使用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);
}
}
答案 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()
中声明变量science
。 tommyscience
仅在调用studentsscience()
时存在,并在该函数完成时停止存在。 tommyscience
' s scope仅限于该功能。
因此,尝试在averagetotal
类中使用它是行不通的,因为关于averagetotal()
构造函数的变量与 tommyscience
不相关存在。这与jennaenglish
,jennamath
,jennascience
,tommyenglish
和tommymath
的问题相同;
这就是您获得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;
}
}
方法,以便初始化变量studentsmath
和tommymath
。我在代码中的任何地方都没有看到jennamath
被调用的地方。所以你可能会以0结束,而不是88.49或91.15。