2013-04-12 5 views
0

Я должен реализовать этот метод, который дает число планет в массиве «planeta».как подсчитать количество итераций для цикла java

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 успешно планеты и она всегда возвращает значение я даю размер при инициализации). Что я делаю не так?

ПРИМЕЧАНИЕ. Я инициализирую массив «planeta» с помощью NP, что означает «Нет планеты». Когда я добавляю новые планеты, они идут в первую свободную позицию, начиная с 0, в массиве «planeta». Пожалуйста помоги!!!!! Спасибо =)

Метод addPlanet: общественного недействительными addPlanet (String Planetname, BigInt х, BigInt у, BigInt г) {

if(!planetExists(planetName) && !complete()){ 

     SpacePoint newSP= new SpacePoint(x,y,z); 
     Planet newPlanet= new Planet(planetName,newSP); 

     s=this.size(); 
     planeta[s]=newPlanet; 

    } 

} 

Как я инициализировать массив "Planeta": частная Planet noPlanet = новая планета («НП»);

/** 
* 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

ли вы пытаетесь отлаживать его? – maszter

+5

Ваш итератор должен быть 'k> = 0', а не' k> 0' - в настоящее время вы не смотрите на планету [0] –

+0

Как его отладить? Я новичок в программировании! –

ответ

0

Если вы объявили массив, как Planet[] planeta = new Planet[12]; длина массива будет всегда 12. Массив уже заполнен неинициализированными значениями. В этом случае null.

Вместо этого используйте ArrayList<Planet> planeta = new ArrayList<Planet>();. Вы можете добавить новые планеты с planeta.add(new Planet()); и вернуть размер с помощью planeta.size().

Если вы должны придерживаться статического массива, вы должны проверить, имеет ли индекс значение null в цикле for и уменьшает размер при его обнаружении.

+0

Я не могу использовать 'ArrayList', я спросил своего учителя, и он сказал, что будет считать это неправильным, потому что дело в том, чтобы работать с массивами ... но я попытался с ним, и это лучше! –

+0

Обновлено мой ответ – Bart

+0

OP указал, что массив 'planeta' заполняется планетами' 'NP '', поэтому там не будет значений' NULL'. –

0

Лучше использовать null s вместо объектов специального значения, то есть 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 для перехода по строкам.

+0

Если я перехожу к null, я получаю 'nullPointerExeption ...' при попытке создать планету. Я просто не вижу, что я делаю неправильно! –

+0

NullPointerException происходит, когда вы делаете «object.member», и объект имеет значение null. Каждое сообщенное исключение будет иметь трассировку стека, а первая строка говорит «at package.class.method (class.java:LINE)». Вы можете использовать эту информацию для поиска проблемы. Без полного исходного кода («class.java») и трассировки стека никто не сможет помочь. – Cebence

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; 



}