![](/img/trans.png)
[英]Java: Using a mutator method on element of array with a for loop, not working
[英]Java mutator method on something that was constructed with a loop
所以我有一個用循環構造的類。 在構造函數中,我有兩個while循環,它們構成了圓圈的“網格”。 它應該是一個圍巾上課,但我稱之為鏈甲,因為這聽起來更酷。 無論如何,我們應該能夠用不同的(客戶)類改變圍巾的顏色。 我顯然需要添加一個mutator方法來改變顏色。 幸運的是,在objectdraw中有一個名為setColor()的mutator。 它工作正常,除非我嘗試將其添加到此類時它只更改網格中的最后一個圓。 我知道為什么會這樣,但我不知道如何解決它。 我已經評論過我們在課堂上一直使用的“典型”變種器。
編輯:抱歉困惑的人...這只是類,我有一個客戶端調用一個新的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);
* }
*/
}
如果你把它移到class(如注釋代碼中所示)那么你從哪里調用這個函數? 我認為這是有所作為的。 假設您正在執行以下操作:
此方案將給出您已報告的結果,即僅最后圈出的顏色。 有兩種方法可以解決這個問題:
我說你扔掉它們因為你這樣做:
while (numLinks < links) {
link = new FramedOval(p,12,12,c);
link.setColor(rgb);
// update the position
p.translate(8,0);
numLinks++;
}
但是你在哪里用你創建的FramedOval做任何事情? 每次你創建一個新的FramedOval對象並有鏈接引用它時,先前的引用會丟失並且可能是垃圾收集; 它被丟棄了,沒有意義。
通常你會這樣做:
List<FramedOval> framedOvalList = new LinkedList<FramedOval>(); // or ArrayList
while (numLinks < links) {
link = new FramedOval(p,12,12,c);
link.setColor(rgb);
// *** here add the created object to some collection
framedOvalList.add(link);
// update the position
p.translate(8,0);
numLinks++;
}
但是我沒有看到你做任何類似的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.