Прежде чем вы скажете, что это старый вопрос, я потратил 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 дублированных идентификаторов.я не знаю, откуда они.