我的代码遇到了这个问题,我知道它必须处理范围,但是我已经研究了很长时间了,我似乎找不到解决方法。任何帮助将不胜感激。似乎所有错误都与我在第一堂课“股票”中设置的参数有关。
这是错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
close cannot be resolved to a variable,
price cannot be resolved to a variable,
change cannot be resolved to a variable,
close cannot be resolved to a variable,
这是我的代码:
public class Stock
{
String Symbol;
String Name;
double previousClosingPrice;
double currentPrice;
Stock(String s, String n, double previousClosingPrice, double currentPrice)
{
Symbol = s;
Name = n;
}
public String getName() {
return Name; }
public String getSymbol() {
return Symbol; }
public double setClosingPrice(double close)
{
previousClosingPrice = close;
return close;
}
public double currentPrice(double price)
{
currentPrice = price;
return price;
}
public double getChangePercent(double change)
{
change = (currentPrice - previousClosingPrice) / currentPrice * 100;
return change;
}
public String toString()
{
System.out.println(Name + " stock closing price is $" + setCurrentPrice(price));
}
}
public class Test_Stock
{
public static void main(String[] args)
{
Stock s1 = new Stock("GOG", "Google", 134.67, 131.98);
Stock s2 = new Stock("MSF", "Microsoft", 156.52, 161.22);
System.out.println("Google stock: ");
System.out.println(" Symbol: " + s1.getSymbol());
System.out.println(" Closing price: " + s1.setClosingPrice(close));
System.out.println(" Current price: " + s1.setCurrentPrice(price));
System.out.println(" Change percent: " + s1.getChangePercent(change));
s1.toString();
System.out.println("Google stock: ");
System.out.println(" Symbol: " + s2.getSymbol());
System.out.println(" Closing price: " + s2.setClosingPrice(close));
System.out.println(" Current price: " + s2.setCurrentPrice(price));
System.out.println(" Change percent: " + s2.getChangePercent(change));
s2.toString();
}
}
答案 0 :(得分:1)
请考虑main
中的这两行,例如:
System.out.println(" Closing price: " + s2.setClosingPrice(close));
System.out.println(" Current price: " + s2.setCurrentPrice(price));
您是指两个变量close
和price
。
在main
中都没有声明。
它们都不被声明为类Stock
的成员变量。
简而言之,它们不存在任何适用范围。您可能已经在两种方法中使用了外观相似的名称,但是它们并不是您现在使用它们时可用的名称。
我认为您对参数传递的工作方式感到困惑。例如,如果我声明一个方法:
void myMethod(int fubar) { ... }
,然后这样称呼它:
myMethod(42);
然后在此特定的myMethod
调用中,变量fubar
的值为42。类似地,如果我这样称呼它:
int xyz = 1 + 2 + 3;
myMethod(xyz);
在调用myMethod
时,fubar
是6。我在这里要说的是fubar
是一个变量,它将从调用中接收一个值。该名称在定义它的方法之外的任何地方都不会自动可用,并且您也不需要使用相同的名称。
答案 1 :(得分:0)
您的Stock对象将String作为第一和第二输入:
Stock(String s, String n, double previousClosingPrice, double currentPrice)
就目前而言,您没有给它提供字符串(我认为是拼写错误,您忘记了双引号),因此请将行更改为:
Stock s1 = new Stock("GOG", "Google", 134.67, 131.98);
Stock s2 = new Stock("MSF", "Microsoft", 156.52, 161.22);
多数民众赞成在第一部分的错误信息。
您遇到的下一个问题是currentPrice()方法中有一个错字-我认为它必须为setCurrentPrice
。
下一步:您的toString()缺少返回语句。
下一步:close
,price
,change
之类的变量未在任何地方设置。在将它们用作参数输入之前,需要将它们设置在某个位置。