在您说这是一个老问题之前,我花了24小时试图解决并阅读所有内容。我发誓。
代码应该接收一个系统ID,然后在所有方向上扫描该系统,每个方向都有自己的长度。这就像扫描一个围绕该系统的矩形,其中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个重复项:
缺少的数字是(8缺失):
我希望有人能指出我正确的方向。感谢。
更新:
如果您观看具有if语句的代码部分。这部分处理边缘。特别是零和10k。关于我想做什么。把它想象成一个长方形的9 * 9点场。有9行9列。每个点的id为1到10k。输入是字段中心点的id(第5列,第5行)。就像现在我知道这个中心点id。我想循环遍历整个字段,使用topsystem(中心点到上边缘之间的距离)找到其他点ID。下降系统(中心点到下边缘之间的距离).leftsystem(中心点和中心点之间的距离)左边缘.rightsystem(中心点和右边缘之间的距离)。
代码工作正常,但有8个缺少的id被8个重复的id替换。我不知道他们来自哪里。
答案 0 :(得分:1)
我不确定你要做什么,所以让我解释你想要做的想法。
您有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";
}