我现在很适合confused.com而且我缺乏编程知识显然......所以有时间打电话给专业人士! (作为旁注,我觉得我已经从你们那里学到了很多东西)
问题
我有一个小应用程序,它采用虚拟墙的宽度,然后要求瓷砖大小,然后计算出你可以适应多少瓷砖宽度之间没有间隙,如果瓷砖不适合用户是提供了两个按钮“grow wall”或“shrink wall”,在这个例子中,如果用于增长墙壁,下面的代码。然后它应该经过一段时间试图以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;
}
答案 0 :(得分:0)
如果您想坚持使用自己的代码,请认识到“获得增量的一半”是尽可能接近的。所以行
wWdth += 0.1;
wdivision = fmod(qWdth,blkWdth);
} while (wdivision ==! 0);
应替换为
wWdth += increment;
wdivision = fmod(qWdth,blkWdth);
} while (abs(wdivision) > 0.5*increment);
答案 1 :(得分:0)
也许我没有完全正确地理解这个问题,所以如果我不这样做,我会道歉。你说你要求瓷砖尺寸对吗?如果瓷砖不能完全贴合到墙壁尺寸,那么你会增长/缩小墙面?如果是这样,你不能只取当前的墙尺寸,并根据你点击长/缩墙时将其设置为瓷砖尺寸的下一个倍数(向上或向下)?将其设置为图块大小的倍数将允许图块完全适合它。
答案 2 :(得分:0)
您的while
循环条件有几个问题。它基于wdivision
的值,而wdivision
的值来自fmod(qWdth,blkWdth)
。但qWdth
和blkWdth
都没有改变。所以你的循环要么执行一次,要么永远执行。
您的循环条件需要基于最终会变为false的值,因此循环会在某个时刻终止。
此外,您使用==!
(我认为)是“不等于”运算符。 “不等于”运算符为!=
。你拥有的是:
while (wdivision == !0);
和!0
相当于1
所以你真的有:
while (wdivision == 1);
所以你的循环将在一次迭代后结束,除非恰好wdivision
等于1.如果是,你的循环永远不会结束。
由于wdivision
是基于double
函数的fmod
,因此它可能永远不会真正等于0。您可能应该使用此代码:
while (division > DBL_EPSILON);
但同样,您需要更改wdivision
的计算方式,以便每次迭代都不同。