【问题标题】:Java - Impossible Error? [closed]Java - 不可能的错误? [关闭]
【发布时间】:2015-07-29 00:59:03
【问题描述】:
  • 当我编译我的程序时,我得到error: cannot find symbol
  • 当我声明变量时,我在getMove() 方法中得到error: variable random is already defined in method
  • 给我这个错误的变量是我的random 变量。
  • 请注意,所有如果 语句不能移动,它们必须保持在你的顺序 见他们。
  • 请注意,如果myCount == 0,我只能更改random。我想保留random,否则它是以前的值。

这是我的课程代码:

public class Frog extends AbstractCritter
{
   private int myDirection;
   private int myCount;

   public Frog()
   {
      super('F');
      myDirection = CENTER;
      myCount = 0;
   }
   public int getMove(CritterInfo theInfo)
   {
      int result = CENTER;

      if (myCount == 0)
      {
         double random = Math.random();
      }

      if (random < 0.25)
      {
         myDirection =  NORTH;
      }
      else if (random < 0.5)
      {
         myDirection = SOUTH;
      }
      else if (random < 0.75)
      {
         myDirection = EAST;
      }
      else
      {
         myDirection = WEST;
      }
      myCount++;
      if (myCount == 3)
      {
         myCount = 0;
      }

      if (theInfo.getNeighbor(myDirection) == 'S')
      {
         result =  CENTER;
      }
      else
      {
         result = myDirection;
      }
      return result;
   }
}

如果有任何不清楚的地方,请在评论中告诉我。谢谢。

【问题讨论】:

  • double random = Math.random(); 是在 if (myCount == 0) 的上下文中声明的,这使得它对方法的其余部分不可用,但是如果您在此语句之前声明另一个变量,您将获得重复的声明跨度>
  • @MadProgrammer 请查看更新后的问题。我需要它在 if 语句中,因为我希望它保持该值直到 myCount 为 0。在 int result = CENTER; 下面声明它也不起作用,它会给出错误。
  • @SotiriosDelimanolis 请参阅我对 MadProgrammer 的回复。
  • 但是变量是方法的本地变量,所以当方法存在时,它的价值就丢失了!?
  • 使用randomif-else-if块移动到声明random的块中。

标签: java class compiler-errors


【解决方案1】:

您的问题是您在第一个 if 语句中定义了 random,因此它仅在该语句中可见。相反,请尝试将其设为类变量:在 private int myCount; 下方添加 private double random; 并在构造函数中添加 random = Math.random(); 以对其进行初始化。

【讨论】:

  • 问题在于我只想在myCount == 0时随机更改
  • 在这种情况下,在int result = CENTER; 正下方,只需添加double random;,然后从您的第一个if 块中删除double,使其仅读取random = Math.random();
  • 这给了我error: variable random might not have been initialized for if (random &lt; 0.25) Here 是截图。
  • 对不起,我的错。您必须将random 初始化为某个值。你可以在你的Frog类中设置它,在你初始化myCount = 0之后(确保你在你的类的开头也声明它,在private int myCount;之后,添加private double random;
  • 我现在明白了,我需要一个私有字段,因为不会在方法之外使用局部变量。请更新您的答案,以便我将此问题标记为已回答。
【解决方案2】:

只需将double random = Math.random();移动到int result = CENTER;这一行之后

您在if 语句中声明了随机,它的范围以if 语句结束。

这个怎么样,如果你想使用随机数 if myCount == 0.

  int result = CENTER;

  double random = 0.0;
  if (myCount == 0)
  {
     random = Math.random();
  }

【讨论】:

  • 通常我会这样做,但我需要能够继续使用随机值,并且只有在计数器为 0 时才更改它。This 屏幕截图显示了分配并描述了我的意思红色下划线。