java - "The nested type cannot hide an enclosing type"类 - Java 处理

标签 java processing

我收到此错误:嵌套类型无法隐藏封闭类型。我查了一下,其他人似乎声明了两次他们的类(class),而我没有。

奇怪的是,如果我将代码复制并粘贴到新的处理文档中,它就不会出现错误。但当我将其转换为 js 时,我需要它在保存并再次打开后能够正常工作。

MotorBike Bike1, Bike2, Bike3, Bike4, Bike5, Bike6, Bike7, Bike8, Bike9;
int Score_Bike1 = 0;
int Score_Bike2 = 0;
int Score_Bike3 = 0;
int Score_Bike4 = 0;
int Score_Bike5 = 0;
int Score_Bike6 = 0;
int Score_Bike7 = 0;
int Score_Bike8 = 0;
int Score_Bike9 = 0;
String Score_Spacing = "        ";
int GameState = 0;


class MotorBike {
float Pos_X;
int Pos_Y;
float Speed;
int Size = 30;
float WheelSize = Size / 3;
color Color;


MotorBike(int Declare_X, int Declare_Y, int Declare_Speed, color Declare_Color)                                                                                                    
{
this.Pos_X = Declare_X;
this.Pos_Y = Declare_Y;
Speed = Declare_Speed;
Color = Declare_Color;
}

void move()
{
if (GameState == 1) {
  Speed = (random(0, 50) / 10);
  Pos_X = Pos_X + Speed;
}
}

void render()
{
fill(Color);
triangle(Pos_X, Pos_Y, Pos_X + Size, Pos_Y, Pos_X + Size / 2, Pos_Y -Size /      2);
fill(255);
strokeWeight(1.5);
ellipse(Pos_X, Pos_Y, WheelSize, WheelSize);
ellipse(Pos_X + Size, Pos_Y, WheelSize, WheelSize);
}
}

void setup()
{
size(700, 600);
background(200);
SpawnBikes();
}

void draw()
{
background(200);
strokeWeight(3);
line(50, 10, 50, 590);
line(650, 10, 650, 590);
strokeWeight(1);
MoveBikes(); 
DetectWinner();
DisplayScore();
}

void MoveBikes()
{
Bike1.render();
Bike1.move();
Bike2.render();
Bike2.move();
Bike3.render();
Bike3.move();
Bike4.render();
Bike4.move();
Bike5.render();
Bike5.move();
Bike6.render();
Bike6.move();
Bike7.render();
Bike7.move();
Bike8.render();
Bike8.move();
Bike9.render();
Bike9.move();
}

void DetectWinner()
{
textSize(15);
fill(0); 
if (Bike1.Pos_X >= 620) {
noLoop(); 
text("Bike 1 Wins", 310, 10, 350, 50); 
Score_Bike1 += 1;
GameState = 2;
}
if (Bike2.Pos_X >= 620) {
noLoop(); 
text("Bike 2 Wins", 310, 10, 350, 50); 
Score_Bike2 += 1;
GameState = 2;
}
if (Bike3.Pos_X >= 620) {
noLoop(); 
text("Bike 3 Wins", 310, 10, 350, 50); 
Score_Bike3 += 1;
GameState = 2;
}
if (Bike4.Pos_X >= 620) {
noLoop(); 
text("Bike 4 Wins", 310, 10, 350, 50); 
Score_Bike4 += 1;
GameState = 2;
}
if (Bike5.Pos_X >= 620) {
noLoop(); 
text("Bike 5 Wins", 310, 10, 350, 50); 
Score_Bike5 += 1;
GameState = 2;
}
if (Bike6.Pos_X >= 620) {
noLoop(); 
text("Bike 6 Wins", 310, 10, 350, 50); 
Score_Bike6 += 1;
GameState = 2;
}
if (Bike7.Pos_X >= 620) {
noLoop(); 
text("Bike 7 Wins", 310, 10, 350, 50); 
Score_Bike7 += 1;
GameState = 2;
}
if (Bike8.Pos_X >= 620) {
noLoop(); 
text("Bike 8 Wins", 310, 10, 350, 50); 
Score_Bike8 += 1;
GameState = 2;
}
if (Bike9.Pos_X >= 620) {
noLoop(); 
text("Bike 9 Wins", 310, 10, 350, 50); 
Score_Bike9 += 1;
GameState = 2;
}
}

void DisplayScore()
{
textSize(15);
fill(0); 
text("Bike 1: " + Score_Bike1 + Score_Spacing + "Bike 2: " + Score_Bike2 +   Score_Spacing + "Bike 3: " + 
Score_Bike3 + Score_Spacing +  "Bike 4: " + Score_Bike4 + Score_Spacing +   "Bike 5: " + Score_Bike5 + Score_Spacing + 
"Bike 6: " + Score_Bike6 + Score_Spacing +  "Bike 7: " + Score_Bike7 + Score_Spacing +  "Bike 8: " + Score_Bike8 + 
Score_Spacing + "Bike 9: " + Score_Bike9, 65, 530, 635, 700);
}

void keyPressed()
{
if (keyPressed) { 
if (key == ' ') 
{
  if (GameState == 0) {
    GameState = 1;
  }
  if (GameState == 2) {
    loop();
    background(200);
    SpawnBikes();
    GameState = 0;
  }
  }
}
}

void SpawnBikes()
{
Bike1 = new MotorBike(50, 100, 2, color(255, 0, 0));
Bike2 = new MotorBike(50, 150, 2, color(0, 255, 0)); 
Bike3 = new MotorBike(50, 200, 2, color(0, 0, 255)); 
Bike4 = new MotorBike(50, 250, 2, color(255, 255, 0));
Bike5 = new MotorBike(50, 300, 2, color(0, 255, 255)); 
Bike6 = new MotorBike(50, 350, 2, color(255, 0, 255)); 
Bike7 = new MotorBike(50, 400, 2, color(100, 255, 0));
Bike8 = new MotorBike(50, 450, 2, color(0, 100, 255)); 
Bike9 = new MotorBike(50, 500, 2, color(255, 0, 100));
}

最佳答案

您的问题是由于您将草图命名为与草图中使用的类相同的名称而引起的。如果草图中有 MotorBike 类,则草图不能命名为 MotorBike

重命名您的草图,或重命名您的类。

在幕后,这是因为处理将您的草图导出为 Java 类,并且草图中的任何类都成为该 Java 类的内部类。所以你的草图变成这样:

class MotorBike{
   void draw(){
      //whatever
   }

   class MotorBike{
      int x;
      //whatever
   }
}

这是非法的 Java,这就是导致您错误的原因。内部类不能与父类同名。换句话说,嵌套类型无法隐藏封闭类型。

这也是为什么当您将其复制到新草图时它可以正常工作的原因 - 处理会为您的草图提供一个随机的默认名称,因此在将草图另存为其他内容之前,不会发生此名称冲突。

关于java - "The nested type cannot hide an enclosing type"类 - Java 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33902511/

相关文章:

java - 如何在不使用背景的情况下删除形状(255);

java - 处理 bufferUntil() 方法仅适用于 '\n'

java - Webapp 在实例化 PoolingHttpClientConnectionManager 时停止

java - 将参数从一个 Controller 传递到另一个 Controller 会产生 java.lang.NullPointerException

java - "follow a link"和 "walk a tree"是什么意思?

javascript - 需要帮助将我的处理代码转换为 p5.js(ArrayList +其他!)

arrays - 如何更改二维数组的大小

java - 有没有更好的方法用 Java 编写此代码(用于 Web 表处理)?

java - 错误: cannot find symbol while passing value

javascript - 在 p5 中调用一个不会循环的类?