Карта сети

Код:
private void map_Scan(World world, int X, int Y, int Z)
{
    int lastCaunt = 0;
    int Count = 1;
    for(int radius = 1; Count != lastCaunt; radius++)
    {
        lastCaunt = Count;
        Count = 0;
        map.clear();
        for(int x = -radius; x == radius; x++)
        {
            for(int y = -radius; y == radius; y++)
            {
                for(int z = -radius; z == radius; z++)
                {
                    TileEntity t = world.getTileEntity(X + x, Y + y, Z + z);
                    if(t instanceof IPowerProvider && ((IPowerProvider)t).isProvider()){ map.add(new Point(x, y, z, PointType.Provaider)); Count++;}
                    else if(t instanceof IPowerEmitter && ((IPowerEmitter)t).isEmitter()){ map.add(new Point(x, y, z, PointType.Emiter)); Count++;}
                    else if(t instanceof IPowerRequester && ((IPowerRequester)t).isRequester()){ map.add(new Point(x, y, z, PointType.Requester)); Count++;}
                    else{map.add(new Point(x, y, z, PointType.Null)); Count++;}
                }
            }
        }
    }
}
Почему List map пустой?
p.s. Как этот метод можно оптимизировать?
 
Ну, во-первых, iirc, ключ в карте идет первым...
 
Ты вообще понимаешь код? У него карта своих блоков-устройств.
 
У тебя в первом же цикле на каждой итерации в начале идет map.clear(). Соответственно, если на последней итерации ни одно из условий внутренних циклов не выполнено, то твой список будет пустым.
 
Код:
        for(int x = -radius; x == radius; x++)
        {
            for(int y = -radius; y == radius; y++)
            {
                for(int z = -radius; z == radius; z++)
                {

Я совсем уже отупел, или не я?
Читай:
Пусть radius = 5;
[Начало цикла]
Пусть x = -5;
[Условие срабатывания цикла]
Пока x == 5;
[Итерация цикла]
x++;

Сколько раз твоё условие в цикле там сработает?
[merge_posts_bbcode]Добавлено: 02.02.2015 04:01:31[/merge_posts_bbcode]

А я такой всмотрелся в код, чуть его переоформил, логику оставил той же, только пофиксил логическую ошибку (поменял == на <=, что, видимо, подозревалось), и попрощался с логикой:

Код:
private void map_Scan(World world, int X, int Y, int Z) {
        int lastCaunt = 0;
        int Count = 1;
        
        for(int radius = 1; Count != lastCaunt; radius++) {
            lastCaunt = Count;
            Count = 0;
            map.clear();
            
            for(int x = -radius; x <= radius; x++)
                for(int y = -radius; y <= radius; y++)
                    for(int z = -radius; z <= radius; z++) {
                        TileEntity t = world.getTileEntity(X + x, Y + y, Z + z);
                        if (t instanceof IPowerProvider && ((IPowerProvider)t).isProvider())
                            map.add(new Point(x, y, z, PointType.Provaider));     //provaider, ok
                        else if(t instanceof IPowerEmitter && ((IPowerEmitter)t).isEmitter())
                            map.add(new Point(x, y, z, PointType.Emiter)); 
                        else if(t instanceof IPowerRequester && ((IPowerRequester)t).isRequester())
                            map.add(new Point(x, y, z, PointType.Requester)); 
                        else 
                            map.add(new Point(x, y, z, PointType.Null)); 
                        
                        Count++; 
                        //Всё тлен, уходим в бесконечность, уходим в небесаааа, 
                        //улетая в космос и залетая в чёёёрную дырууу;
                        //заметив сингулярность, сбиваем обороты, оглядываемся, и не видим нифига 
                        //толкового
                    }
        }
}

На самом деле, если мы увеличиваем радиус каждый раз, то как бы логично, что
число блоков в этой итерации не будет равно числу блоков в предыдущей итерации.
Да?
 
Да, если бы я считал блоки, но я считаю тайлы, наследующие IPowerProvider и рано или поздно они закончатся. И число найденных объектов в этой итерации будет равно количеству объектов в прошлой.  В коде, который я выложил в первом посте, была ошибка, что Count увеличивался даже если тайл не подходил. 

Как можно оптимизировать этот метод, а то при радиусе 90+начинает существенно подлагивать?
 
Выполняй не в один тик тогда.
 
Назад
Сверху