【发布时间】:2011-10-13 02:03:16
【问题描述】:
所以我有一个用循环构造的类。在构造函数中,我有两个 while 循环,它们构成了圆圈的“网格”。它应该是上课用的围巾,但我称它为锁子甲,因为这听起来更酷。无论如何,我们应该能够用不同的(客户端)类来改变围巾的颜色。我显然需要添加一个 mutator 方法来改变颜色。幸运的是,在 objectdraw 中有一个称为 setColor() 的 mutator。它工作得很好,除了当我尝试将它添加到这个类时,它只会改变网格中的最后一个圆圈。我知道为什么会发生这种情况,但我不知道如何解决它。我已经注释掉了我们在课堂上使用的“典型”突变体。
编辑:抱歉让大家感到困惑...这只是课程,我有一个客户端调用 new ChainMail() 然后对其执行 .setColor() 但它只更改最后一个 framedoval 而不是全部其中。这就是问题
import objectdraw.*;
import java.awt.*;
public class ChainMail {
private FramedOval link;
public ChainMail(int rows,int links,
Location p,Color rgb,
DrawingCanvas c) {
double numRows = 0;
// create the number of rows specified
while (numRows < rows) {
double numLinks = 0;
// create the number of links specified
while (numLinks < links) {
link = new FramedOval(p,12,12,c);
link.setColor(rgb);
// update the position
p.translate(8,0);
numLinks++;
}
// move position back to front col and down one row
p.translate(-8*links,8);
numRows++;
}
}
public ChainMail(int rows,int links,Location p,DrawingCanvas c) {
this(rows,links,p,Color.BLACK,c);
}
/* this doesn't work, only changes last circle
* public void setColor(Color c) {
* link.setColor(c);
* }
*/
}
【问题讨论】:
-
你在哪里添加链接?您似乎在 while 循环中创建了一个 FramedOval,但随后似乎没有对它做任何事情,就好像您只是丢弃它一样。
-
编辑以更好地代表问题
-
不幸的是,您的编辑没有澄清任何问题。再一次,您创建 FramedOval 对象,再一次,您似乎对它们什么也不做。您在哪里将它们添加到集合、数组、GUI、anything?
-
你把它们扔掉了,你知道的。
-
我不会把它们扔掉.....这个类是一个构造函数,它定义了对象链邮件。然后在我的客户端中,我使用正确的参数调用 new ChainMail(),它会按照我想要的方式在网格中绘制 framedovals ......我不明白你在说什么,我要把它们扔掉......
标签: java while-loop mutators