2015-04-03 2 views
-2

Я пытаюсь выполнить задачу, где: У вас есть 100 дверей подряд. Вы делаете 100 проходов у дверей. В первый раз вы посещаете каждую дверь и переключаете дверь (если дверь закрыта, вы ее открываете, если она открыта, вы ее закрываете). Во второй раз вы посещаете только каждую вторую дверь (дверь № 2, № 4, № 6, ...). В третий раз, каждая 3-я дверь (дверь № 3, №6, №9, ...) и т. Д., Пока вы не посетите только 100-ю дверь.Null-Pointer при установке значений в BidiMap

Проблема: при установке ключей и значений на карте я получаю исключение нулевой точки.

Вот код:

import org.apache.commons.collections4.*; 

public class Doors_100 
{ 

    private BidiMap<Integer, Boolean> doors; 
    Random r = new Random(); 
    public Doors_100() 
    { 
     for(int i = 1; i < 101; i++){ 
      doors.put(Integer.valueOf(i), r.nextBoolean()); //here is the null-pointer 
     } 
    } 

    public void toggleDoors() { 
     for(int i = 1; i < 101; i++){ 
        for(boolean value : doors.values()){ 
         if(doors.getKey(value) % i == 0){ 
         doors.get(value); 
         value ^= true; 
         System.out.println("Key: " + doors.getKey(value) + " Value: " + doors.get(value) 
        + " at " + i); 
        } 
       } 
     } 
    } 

ответ

0

BidiMap является интерфейсом.
Используйте класс, который его реализует (например, TreeBidiMap).

Посмотрите на это link.

0

Вы должны инициализировать doors:

private BidiMap<Integer, Boolean> doors = new SomethingImplementingBidiMap<>(); 
+0

У меня было, но BidiMap - это абстрактная карта. Если вы знаете, что это такое, поделитесь :) – user8

+0

Вы посмотрели на [javadoc] (https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/ коллекции/BidiMap.html) для известных классов реализации? –

+0

Да, там он сглажен через DualHashBidiMap(), который мой JE говорит, что он не существует – user8

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