2016-08-13 62 views
-2

发现我有一个设计采取一个字符串值的方法创造了一个魔方类:方法不超

public Cube() 
{ 
    super(); 
} 

public Cube(int side) 
{ 
    this.side = side; 
} 

public Cube(String color) 
{ 
    this.color = color; 
} 

我在我的魔方类扩展

另一个子创建了一个setter方法
public void setColor() 
{ 
    this.color = color; 
} 

当我使用setColor(Cube.Cube(RED));方法,我得到一个编译错误和一个RuntimeException。 IDE说它无法在Cube类中找到Cube(字符串)符号。

我接近这个不正确吗?

编辑: 我使用的RED变量初始化为:

final static String RED = "red"; 

我的最终目标是建立基于用户输入的物体的颜色。这是为了一个学校项目,所以我在发布整个代码时犹豫不决。我不想干扰我用这种方法试图完成的事情。这是一个初学者级别的Java类,因此我使用switch语句作为用户输入。如果用户输入“红色”,我试图调用此方法将立方体的颜色设置为红色。

static void addCubeColor() 
{ 
    String userColor; 
    System.out.println("Please enter the cube's color: "); 
    userColor = input.nextLine(); 

    switch(userColor.toLowerCase()) 
    { 
     case RED : setColor(Cube.Cube(RED)); 
        break; 

     case GREEN : setColor(Cube.Cube(GREEN)); 
        break; 

     case BLUE : setColor(Cube.Cube(BLUE)); 
        break; 

     default : setColor(Cube.Cube(RED)); 
        break; 
    } 
} 
+0

如果你得到一个异常*和*编译错误,那说明你试图运行代码,尽管它没有编译。不要这样做。接下来,目前还不清楚你期望“Cube.Cube(RED)”的表达意味着什么......你的意思是“Cube.RED”?最后,如果你只是提供一个[mcve]来展示问题而不是片段,那真的很有帮助。目前还不清楚问题是否与子类有关,或者只是说您没有正确引用常量。 –

+0

setColor方法看起来很奇怪。你确定它没有参数吗? –

回答

1

你的setColor方法应采取一个参数,即你的颜色变量是同类型的,然后使用该参数来设置颜色。你的不是。

例如,

public void setColor(ColorType color) { 
    this.color = color; 
} 

在哪里是的ColorType的颜色变量的类型。例如,如果这是AWT或Swing,ColorType将是java.awt.Color

+0

谢谢你的抬头。我根本没有听到! 虽然仍然收到编译错误。但NetBeans说它仍然无法找到符号(Cube位置中的方法Cube(字符串))。 – Brock

0

编辑:它也应该是“Cube.RED”作为您的参数,我相信。您将静态变量作为[所在类名称] [静态变量名称]传递,因此在这种情况下为“Cube.RED”。

看起来像这样的错误是因为你试图将参数传递给setColor(),但该方法不接受任何参数。将其更改为

public void setColor(String color) 
{ 
    this.color = color; 
} 

应该解决它。

+0

好吧,那是*一个*错误。另一种是使用'Cube.Cube(RED)'作为表达。鉴于我们只看到了一些代码片段,如果还有其他问题,我不会感到惊讶。 –

+1

是的。代码似乎有些过于复杂。 – Matt

+0

代码中可能存在其他错误,但我无法看到,但是程序会生成,并且我的IDE不会显示除此之外的任何其他错误。 – Brock

0

您正在执行的错误setColor(Cube.Cube(RED));意味着编译器正在寻找名为Cube的静态函数。它看起来像你想达到什么是

setColor(new Cube(RED));

0

public Cube(String color)不是方法而是一个构造函数。要调用它,您必须使用new Cube(color),但请注意,它会创建一个Cube的新实例。

如果您的目标是更改现有多维数据集的颜色,则必须在实例上调用setColor方法。 例如:

final Cube cube = new Cube(RED); // A new red cube 
cube.setColor(BLUE); // cube is now blue 

对于这个工作,你setColor方法应采取String color说法:

public void setColor(String otherColor) { 
    this.color = otherColor; 
} 
+0

这就是我所担心的。在运行此代码之前已经创建了多维数据集,因此我试图将颜色值分配给已创建的对象。 – Brock

+0

你应该可以用'cube.setColor(<你的新颜色>);'来改变颜色。 如果'Cube'上不存在'setColor',并且无法修改'Cube'类,则应该使用不同的颜色创建一个新的'Cube',并使用它而不是旧的。 –