我必须实现这个方法,它给出了数组“planeta”中的行星数。
public int size() {
int size=planeta.length-1;
for (int k=planeta.length-1;k>0;k--){
if (planeta[k].name().equals(noPlanet))
size--;
}
return size;
}
它返回“planeta.length-1”的值而不是它应该的值(例如,我成功添加了2个行星,它总是返回我在初始化时给予size的值)。我做错了什么?
注意:我用NP初始化阵列“planeta”,这意味着没有行星。当我添加新行星时,它们会从数组“planeta”中的0开始进入第一个自由位置。请帮忙!!!!!谢谢=)
addPlanet方法: public void addPlanet(String planetName,BigInt x,BigInt y,BigInt z){
if(!planetExists(planetName) && !complete()){
SpacePoint newSP= new SpacePoint(x,y,z);
Planet newPlanet= new Planet(planetName,newSP);
s=this.size();
planeta[s]=newPlanet;
}
}
我如何初始化数组“planeta”: 私人星球noPlanet =新星球(“NP”);
/**
* Creates a new Galaxy with no associated Planets and a given name
* @param name the name of the Galaxy
*/
public Galaxy(String name) {
this.name=name;
//if the galaxy has no planets in it,it's array if filled with planet NP-No Planet
for (int i=0;i<planeta.length;i++)
planeta[i]=noPlanet;
}
答案 0 :(得分:0)
如果您将数组声明为Planet[] planeta = new Planet[12];
,则数组的长度始终为12
。该数组已填充未初始化的值。在这种情况下null
。
请改用ArrayList<Planet> planeta = new ArrayList<Planet>();
。
您可以使用planeta.add( new Planet() );
添加新行星,并使用planeta.size()
返回大小。
如果必须坚持使用静态数组,则应测试索引在null
循环中是否具有for
值,并在找到时减小大小。
答案 1 :(得分:0)
最好使用null
代替特殊值对象,即new Planet("NP")
。
我猜这是你要找的东西:
public class Galaxy {
// Empty array of size = 10, i.e. { null, null, .. , null }
private Planet[] planeta = new Planet[10];
public Galaxy(String name) {
this.name = name;
}
public int size() {
int size = 0;
for (int k = 0; k < planeta.length; k++) {
// Is there a planet or is it empty?
if (planeta[k] != null) {
// There's a planet.
size++;
}
}
return size;
}
public boolean planetExists(String planetName) {
// Go through the array looking for that planet...
for (int k = 0; k < this.size(); k++) {
// NOTICE that we're going only through the non-empty array elements,
// but we'll check for null either way.
if (planeta[k] != null && planeta[k].name().equals(planetName)) {
// Found it.
return true;
}
}
// Didn't find the planet.
return false;
}
public void addPlanet(String planetName, BigInt x, BigInt y, BigInt z) {
if (!planetExists(planetName) && !complete()) {
SpacePoint newSP = new SpacePoint(x, y, z);
Planet newPlanet = new Planet(planetName, newSP);
int position = this.size();
planeta[position] = newPlanet;
}
}
}
对于调试,大多数开发环境(IDE)都在Run > Debug
命令中有Run > Run
命令。首先,您需要在所选行上设置一个断点,通常为Run > Toggle Breakpoint
。使用Run > Step into
和Run > Step over
命令逐行进行。
答案 2 :(得分:0)
这个有效! (至少在我的情况下)我会告诉你这些变化:
public int size() {
int size = planeta.length;
for (int k=planeta.length-1; k>=0; k--) {
// Is there a planet or is it empty?
if (planeta[k].equals(noPlanet)) {
// There's no Planet
size--;
}
}
return size;
}
方法planetExists:
public boolean planetExists(String planetName) {
for (int i=0;i<planeta.length;i++)
if (planeta[i].name().equals(planetName))
return true;
return false;
}