Вложены ли циклы и дубликаты результатов? - PullRequest
0 голосов
/ 06 июня 2011

Прежде чем вы скажете, что это старый вопрос, я потратил 24 часа, пытаясь решить и прочитать всеКлянусь.

Код должен получить один системный идентификатор и затем сканировать эту систему во всех направлениях, причем каждое направление имеет свою собственную длину.Это похоже на сканирование прямоугольника вокруг той системы, где 9 * 9 = 81 система.

Код работает очень хорошо;но проблема.Я получаю 8 повторяющихся результатов, и в результатах отсутствует полная строка.Тот, что чуть выше среднего ряда.Я думаю, что проблема в topsystem целом числе, но я не знаю, что с ним не так.

вот код:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" verticalAlign="middle">


<mx:Script>
    <![CDATA[


        private function startscan():void {
            var startsystem:int = int(system.text);
            var resultsys:String = systemsaround.text;
            var leftsystem:int = -4;
            var rightsystem:int = 4;
            var topsystem:int = -400;
            var downsystem:int = 400;
            var mediumsys:int = 0;
            var tempdownsystem:int = 0;
            var temptopsystem:int = 0;


            if(startsystem + downsystem > 10000){
                downsystem = 400 -((startsystem + downsystem) - 10000);
                downsystem = Math.floor(downsystem/100)*100;
                topsystem = topsystem - (400 - downsystem);
            }
            if(startsystem + topsystem < 1){
                topsystem = -400 + (1+(-1*(startsystem + topsystem)));
                topsystem = Math.ceil(topsystem/100)*100;
                downsystem = downsystem + (400 - (topsystem * -1));
            }
            if(startsystem + leftsystem < 1){
                leftsystem = -4 + (1+(-1*(startsystem + leftsystem)));
                rightsystem = rightsystem + (4 - (leftsystem * -1));
            }
            if(startsystem + rightsystem > 10000){
                rightsystem = 4 -((startsystem + rightsystem) - 10000);
                leftsystem = leftsystem - (4 - rightsystem);
            }

            resultsys = systemsaround.text;
            systemsaround.text = resultsys + "down" + downsystem + "top" + topsystem + "left" + leftsystem + "right" + rightsystem + ":" + startsystem + "\r";
            resultsys = systemsaround.text;

            while (rightsystem > 0) {
            resultsys = systemsaround.text;
            mediumsys = startsystem + rightsystem;
            systemsaround.text = resultsys + mediumsys + "\r";
            resultsys = systemsaround.text;
            tempdownsystem = downsystem;
            temptopsystem = topsystem;
            rightsystem--;

                        while (downsystem > 0) {
                            resultsys = systemsaround.text;
                            mediumsys = mediumsys + downsystem;
                            systemsaround.text = resultsys + mediumsys + "\r";
                            resultsys = systemsaround.text;

                            downsystem = downsystem - 100;


                        }
                        while (topsystem < 0) {
                            resultsys = systemsaround.text;
                            mediumsys = mediumsys + topsystem;
                            systemsaround.text = resultsys + mediumsys + "\r";
                            resultsys = systemsaround.text;

                            topsystem = topsystem + 100;


                        }
            downsystem = tempdownsystem;        
            topsystem = temptopsystem;


            }





            while (leftsystem < 0) {
            resultsys = systemsaround.text;
            mediumsys = startsystem + leftsystem;
            systemsaround.text = resultsys + mediumsys + "\r";
            resultsys = systemsaround.text;
            tempdownsystem = downsystem;
            temptopsystem = topsystem;
            leftsystem++;
                        while (downsystem > 0) {
                            resultsys = systemsaround.text;
                            mediumsys = mediumsys + downsystem;
                            systemsaround.text = resultsys + mediumsys + "\r";
                            resultsys = systemsaround.text;

                            downsystem = downsystem - 100;


                        }
                        while (topsystem < 0) {
                            resultsys = systemsaround.text;
                            mediumsys = mediumsys + topsystem;
                            systemsaround.text = resultsys + mediumsys + "\r";
                            resultsys = systemsaround.text;

                            topsystem = topsystem + 100;


                        }
            downsystem = tempdownsystem;        
            topsystem = temptopsystem;  



            }

                        while (downsystem > 0) {
                            resultsys = systemsaround.text;
                            mediumsys = startsystem + downsystem;
                            systemsaround.text = resultsys + mediumsys + "\r";
                            resultsys = systemsaround.text;

                            downsystem = downsystem - 100;


                        }
                        while (topsystem < 0) {
                            resultsys = systemsaround.text;
                            mediumsys = startsystem + topsystem;
                            systemsaround.text = resultsys + mediumsys + "\r";
                            resultsys = systemsaround.text;

                            topsystem = topsystem + 100;


                        }






        }
    ]]>
</mx:Script>


    <mx:VBox width="488" height="304" horizontalCenter="0" verticalCenter="-16" horizontalAlign="center" verticalAlign="middle">
        <mx:TextInput id="system" text="3375"/>
        <mx:TextArea width="80%" height="228" fontSize="10" id="systemsaround"/>
        <mx:Button label="start"  click="startscan()" id="start"/>
    </mx:VBox>

</mx:WindowedApplication>

, если вы предоставляете стартовую систему как3375, вы получите 81 результат с этими 8 дубликатами:

  • 3379 3378 3377 3376 3371 3372 3373 3374

, а недостающие числа (8 отсутствует):

  • 3279 3278 3277 3276 3274 3273 3272 3271

Я надеюсь, что кто-то может направить меня в правильном направлении.Спасибо.

Обновление:

, если вы смотрите ту часть кода, в которой есть операторы if.эта часть обрабатывает края. особенно ноль и 10к.о том, что я хочу сделать.Думайте об этом как поле 9 * 9 точек в прямоугольной форме.имеет 9 строк и 9 столбцов.каждая точка имеет идентификатор от 1 до 10k.вход - это идентификатор точки в центре поля (столбец 5, строка 5).как теперь я знаю этот идентификатор центральной точки.я хочу пройтись по всему полю, чтобы найти другие идентификаторы точек, используя topsystem (расстояние между центральной точкой до верхнего края) .downsystem (расстояние между центральной точкой и нижним краем) .leftsystem (расстояние между центральной точкой илевый край) .rightsystem (расстояние между центральной точкой и правым краем).

код работает нормально, но есть 8 пропущенных идентификаторов, которые заменены на 8 дублированных идентификаторов.я не знаю, откуда они.

1 Ответ

1 голос
/ 06 июня 2011

Я не уверен, что вы пытаетесь сделать, поэтому позвольте мне объяснить, что я думаю вы пытаетесь сделать.

У вас есть 10000 «систем», расположенных в сетке 100x100. Учитывая номер системы, вы хотите вывести все 81 номер системы вокруг него. За исключением краев сетки, вы не хотите выводить их.

В этом случае удалите весь код и попробуйте вместо этого:

var x = int(system.text)%100;
var y = Math.floor(int(system.text)/100);
for(var dx=-4; dx <= 4; dx++)
for(var dy=-4; dy <= 4; dy++) 
  if(0 <= x+dx && x+dx <= 100 && 0 <= y+dy && y+dy <= 100)
    systemsarround.text += x+dx + (y+dy)*100 + "\r";

Это не проверено, но вы поняли.

Еще одна попытка:

var x = int(system.text)%100;
var y = Math.floor(int(system.text)/100);
for(var dx=-4; dx <= 4; dx++)
for(var dy=-4; dy <= 4; dy++){
  var sys = x+dx + (y+dy)*100;
  if(1 <= sys && sys <= 10000)
    systemsarround.text += sys + "\r";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...