嵌套While循环和重复结果
Nested While Loops and Duplicate results?
在你说这是一个老问题之前,我花了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个重复:
- 3379 3378 3377 3376 3371 33723373 3374
缺少的数字是(缺少8个):
- 3279 3278 3277 3276 3274 32733272 3271
我希望有人能给我指明正确的方向。谢谢
更新:
如果您观察代码中包含if语句的部分。这个部件处理边缘,特别是零和10k。关于我想做什么。把它想象成一个9*9点的矩形场。具有9行9列。每个点具有从1到10k的id。输入是字段中心(第5列,第5行)的点的id。现在我知道了这个中心点id。我想循环浏览整个字段,使用topsystem(中心点到上边缘之间的距离)、downsystem(中央点到下边缘之间的间距)、leftsystem(中央点和左边缘之间的距离)、rightsystem(中央点通过右边缘之间的间隔)找到其他点id。
代码运行良好,但有8个缺失的id被8个重复的id所取代。我不知道他们从哪里来。
我不确定你想做什么,所以让我解释一下我认为你想做的。
您有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";
}
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 基于两个条件退出While循环
- Javascript,输出结果后页面不断刷新
- 嵌套在WHILE循环中的IF语句的结果混淆了我(Javascript)
- While循环未将正确的结果推送到数组
- Javascript do/while循环显示意外结果
- 在while循环中使用递归会产生奇怪的结果
- PHP Database Query:如何将 while 循环的结果返回到 Javascript 变量
- javascript while循环在节点和浏览器中给出不同的结果
- 如何让while循环将其结果存储在数组中,并重复10次
- Javascript While循环返回奇怪结果
- 委托while循环,JS和jQuery的结果
- 即使条件n't不满足,while循环的结果仍然发生
- 只能发布while循环的第一个结果
- while循环-如何将userInput转换为一个数字,并使用该数字创建一个期望的结果与javascript
- 嵌套While循环和重复结果
- 通过while循环在ajax请求中获得特定的结果