0

我现在很困惑.com,我缺乏编程知识显然表明......所以是时候打电话给专业人士了!(作为旁注,我确实觉得我已经从你们那里学到了很多东西)

问题

我有一个小应用程序,它采用虚拟墙的宽度,然后询问瓷砖尺寸,然后计算出你可以容纳多少瓷砖而宽度之间没有间隙,如果瓷砖不适合,用户会看到两个按钮“增长墙”或“缩小墙”,在此示例中,如果用于增长墙,则下面的代码。然后,它应该在尝试以 0.1 为增量找出墙需要多宽才能让瓷砖完全贴合的同时运行。它需要能够处理双精度值,例如墙宽 12.5 英尺,瓷砖宽度和长度 13.6,这就是为什么我使用双精度而不是整数

我有以下代码(但认为我过于简化了)

无论哪种方式它都不起作用我花了半天时间阅读播放等但无法弄清楚,我是走错路还是走在正确的轨道上

一如既往,任何建议都会受到热烈欢迎

H先生

{

double wWdth;
double tWdth;
double wdivision = 3;

NSString *growstring = [NSString stringWithFormat:@"%@,%@", self.wallWidth.text, self.tileWidth.text];
NSArray *wall = [growstring componentsSeparatedByString:@","];
NSLog(@"%@",wall);
wWdth = [[wall objectAtIndex:0]doubleValue];
blkWdth = [[wall objectAtIndex:1]doubleValue];

do
{
    NSLog(@" INSIDE WHILE %.f",wdivision);
    wWdth = wWdth;
    wWdth += 0.1;
    wdivision = fmod(qWdth,blkWdth);
} while (wdivision ==! 0);




NSString* newWdth = [NSString stringWithFormat:@"%.f", wWdth];
self.wallWidth.text=newWdth;

}

4

3 回答 3

0

如果您想坚持使用您拥有的代码,请认识到“在增量的一半以内”是尽可能接近的。所以线条

wWdth += 0.1;
wdivision = fmod(qWdth,blkWdth);
} while (wdivision ==! 0);

应该替换为

wWdth += increment;
wdivision = fmod(qWdth,blkWdth);
} while (abs(wdivision) > 0.5*increment);
于 2013-06-24T16:11:27.220 回答
0

也许我没有完全正确地理解这个问题,所以如果我不理解,我深表歉意。你说你要求瓷砖尺寸对吗?如果瓷砖不能完美地适应墙壁尺寸,那么你会扩大/缩小墙壁吗?如果是这样,您不能只根据您单击“增长/收缩墙”时的当前墙尺寸并将其设置为瓷砖尺寸的下一个倍数(向上或向下)吗?将其设置为图块大小的倍数将允许图块完全适合其中。

于 2013-06-24T16:31:09.617 回答
0

您的while循环条件有几个问题。它基于 的值,wdivision而 的值wdivision来自fmod(qWdth,blkWdth)。但既没有qWdthblkWdth永远不会改变。所以你的循环要么执行一次,要么永远执行。

您的循环条件需要基于一个最终会变为假的值,以便循环在某个点终止。

此外,您正在使用==!for (我假设)作为“不等于”运算符。“不等于”运算符是!=. 你真正拥有的是:

while (wdivision == !0);

并且!0等于1所以你真的有:

while (wdivision == 1);

所以你的循环将在一次迭代后结束,除非恰好wdivision等于 1。如果是这样,你的循环将永远不会结束。

由于wdivisiondouble基于fmod函数的,它实际上可能永远不会完全等于 0。您可能应该改用它:

while (division > DBL_EPSILON);

但同样,您需要更改wdivision计算方式,以便每次迭代都不同。

于 2013-06-24T18:08:02.487 回答