2017-01-19 1 views
0

У меня есть эта программа, которая имеет класс Ant, где:Java- Конструктор по умолчанию с одной инициализирована переменной массива типа и назвав его в основной

конструктор по умолчанию инициализирует переменные экземпляра маток только 1 королева по имени «Beth »И colonySize до 100 000.

Определенный конструктор принимает два параметра и инициализирует соответствующие переменные экземпляра .

Метод display, показывает информацию о муравей в формате ниже:

This ant colony has the following queens: 
Queen 1: Beth 
The colour of the ants: black 
The approximate colony size: 100000 

Вот что я сделал:

public class Ant { 

private String[] queens; 
private String colour= "black"; 
private int colonySize; 


public Ant(){ 
    queens[0]= "Beth"; 
    colonySize= 100000; 
} 

public Ant(String[] queens, int colonySize){ 
    this.queens[0]= queens[0]; 
    this.colonySize= colonySize; 
} 

public void display(){ 
    System.out.println("Queen 1: "+ this.queens[0]); 
    System.out.println("Colour of the ants: "+colour); 
    System.out.println("The size of the colony: "+ this.colonySize); 
    } 
} 

к веро что возникает, когда я называю его в основном.

Главный класс

public class MainAnts { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Ant obj= new Ant(); 
     obj.display(); 

    } 

} 

Я получаю исключение Null Pointer (потому что я полагаю, что это не правильный способ вызова метода отображения в основном, так как он имеет переменную массив).

+0

Stepping через код с помощью отладчика может помочь. То, как большинство других людей исправляет свой код. – Paul

+1

Массивы Java фиксируются с размером, который вы объявляете/строите. Твои королевы пусты. Самое простое исправление: 'private String [] queens = {" "};' но посмотрите ответ от Роберта Касперчика для более тщательного ответа. –

ответ

1

Проблема в том, что вы никогда не инициализируете массив ваших ферзей. Если вы хотите использовать обычный массив с фиксированной длиной, то сделать:

public Ant() { 
     queens = new String[1000] //or whatever size you want 
     queens[0] = "Beth"; 
     colonySize = 100000; 
    } 

Или вы можете использовать ArrayList:

private List<String> queens; 
    private String colour = "black"; 
    private int colonySize; 


    public Ant() { 
     queens = new ArrayList<>(); 
     queens.add("Beth"); 
     colonySize = 100000; 
    } 
    public void display() { 
     System.out.println("Queen 1: " + this.queens.get(0)); 
     System.out.println("Colour of the ants: " + colour); 
     System.out.println("The size of the colony: " + this.colonySize); 
    } 
+0

Возможно, 'queens = new ArrayList ();'? –

+0

Существуют ли какие-либо преимущества задания типа два раза (объявление и определение)? Я думал, что в этом случае это избыточно. –

+0

Не так много здесь, где они всего лишь несколько линий друг от друга, но в целом. YMMV. –

Смежные вопросы