Java-参数“无法解析为变量”错误

时间:2019-03-18 00:13:35

标签: java compiler-errors

我的代码遇到了这个问题,我知道它必须处理范围,但是我已经研究了很长时间了,我似乎找不到解决方法。任何帮助将不胜感激。似乎所有错误都与我在第一堂课“股票”中设置的参数有关。

这是错误:

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();
   }

}

2 个答案:

答案 0 :(得分:1)

请考虑main中的这两行,例如:

  System.out.println("    Closing price: " + s2.setClosingPrice(close));
  System.out.println("    Current price: " + s2.setCurrentPrice(price));

您是指两个变量closeprice

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()缺少返回语句。

下一步:closepricechange之类的变量未在任何地方设置。在将它们用作参数输入之前,需要将它们设置在某个位置。