2013-06-24 16 views
0

我現在正確confused.com和我缺乏編程知識顯然顯示...所以有時間在專業人士的電話! (作爲一個方面說明我會感到我已經學到了很多東西已經從你所有)做 - 雖然現在我在邏輯上陷入了

的問題

我有一個小應用程序,需要一個虛擬牆的寬度,然後請求對瓷磚尺寸,然後計算出可以適合多少瓦片,並且寬度之間沒有間隙,如果瓦片不合適,用戶會看到兩個按鈕「grow wall」或「shrink wall」,在此示例中,代碼如下if爲了種植牆壁。然後它應該試着以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; 

}

+1

即使你需要'13.6'等等的維度,當你試圖讓事情變得合適時,用整數來思考是一個非常好的主意。因此,可能需要1/100英寸的「單位」 - 然後13.6'= 12 * 13.6 = 163.2英寸= 16320「釐米 - 英寸」。現在你不會遇到雙打討厭的問題,不能精確地代表「合理的」數字,比如「13.6」(事實上,只有以'5'結尾的小數纔有可能被精確表示)。可能不是你唯一的問題,但與整數工作肯定會有所幫助! – Floris

+0

@弗洛里斯:同意。 –

+0

我只能說謝謝,你對減少數字的清晰看法使得數學更容易處理謝謝(我已經改變了數學) –

回答

0

你的while循環條件有幾個問題。它基於wdivision的值和wdivision的值來自fmod(qWdth,blkWdth)。但是qWdthblkWdth都不會改變。所以你的循環將執行一次或永遠。

您的循環條件需要基於一個最終會變成false的值,因此循環終止於某個點。

此外,您正在使用==!(我認爲)是「不等於」運算符。 「不相等」的運算符是!=。你有什麼是真的:

while (wdivision == !0); 

!0相當於1所以你真的有:

while (wdivision == 1); 

所以,除非是碰巧的是,wdivision等於1的循環將一個迭代後結束。如果是這樣,你的循環將永遠不會結束。

由於wdivision是基於fmod函數的double,因此它可能不會完全等於0。你或許應該用這個來代替:

while (division > DBL_EPSILON); 

但同樣,你需要改變如何wdivision的方式計算出來它是不同的每次迭代。

0

如果你想堅持你的代碼,認識到「增量的一半內得到」是儘可能接近你可以得到的。因此,線

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

應與

wWdth += increment; 
wdivision = fmod(qWdth,blkWdth); 
} while (abs(wdivision) > 0.5*increment); 
+0

感謝您的反饋 –

0

也許我沒有完全正確理解問題所取代,所以我道歉,如果我不知道。你說你要求瓷磚尺寸正確嗎?然後,如果瓷磚不能完美地貼合牆壁尺寸,那麼您會長大/縮小牆壁?如果是這樣,你不能只是取當前牆的大小,並根據你點擊增長/縮小牆的時間來設置它的下一個倍數(向上或向下)。將其設置爲瓦片大小的倍數將允許瓦片完全適合它。

+0

另一個很好的建議,我會採用這個應用程序的不同領域!感謝您的反饋 –