2015-04-04 38 views
0

我仍然在學習與Windows窗體C#,我想要一些幫助我的if語句。需要幫助搞清楚我在做什麼錯我的if語句

變量是固定的,所以除了他們只會點擊一個按鈕之外,沒有用戶輸入。我的問題開始於if語句的開頭。

VS(Visual Studios)不斷地說,halfcalc中的條件,以及hours用於轉換爲字符串都是未分配的局部變量。

然後在數學方程的else語句中,VS一直說「小時」不能從double轉換爲hours

我不知道這是什麼意思,因爲我已經宣佈他們。然後它說thirtheenpercent不能在範圍內聲明,因爲它已經被聲明。我不知道爲什麼會這樣說,因爲這個雙打不應該改變。

有人可以幫我解釋爲什麼我得到這些錯誤嗎? 任何幫助將不勝感激。

 decimal onecup = 130; 
     decimal thirtheenpercent; 
     decimal hours=0; 
     decimal half=130/2; 
     decimal calc=0; 

     while (onecup>half) 
     { 
      thirtheenpercent = (onecup * 13)/100; 
      calc =onecup-thirtheenpercent; 
      onecup=calc; 
      hours++; 
     } mtbHalf.Text = Convert.ToString(hours)+" Hours."; 

     while (!(hours==24)) 
     { 
      thirtheenpercent = (onecup * 13)/100; 
      calc = onecup - thirtheenpercent; 
      onecup = calc; 
      hours++; 
     } mtbOnecup24.Text = Convert.ToString(Math.Round(calc,2)) + " mg."; 
     //While i was running this program, i ran into some conflictions with my already declared variables for my last while loop so i created some new ones.// 
     decimal thirtheenpercent2; 
     decimal calc2 = 0; 
     decimal onecup2 = 130; 
     int hours2 = 0; 

     while (!(hours2 == 24)) 
     { 
      thirtheenpercent2 = (onecup2 * 13)/100; 
      calc2 = onecup2 - thirtheenpercent2; 
      onecup2 = calc2; 
      hours2++; 
      onecup2 = onecup2 + 130; 
     } mtbQuantity.Text = Convert.ToString(Math.Round(onecup2, 2)) + " mg."; 


    } 
+0

好吧,'hours' _is_ unassigned。就'half'和'calc'而言,也許你只是誤解了錯誤信息。 – 2015-04-04 02:00:39

+1

你不能寫'hours * thirtheenpercent = calc'。任務必須涉及左側的一些存儲位置;你不能給表達式分配一些值。 – 2015-04-04 02:01:56

+0

另請注意,'double'類型是近似的,所以你可能永遠不會碰到你的'half == calc'條件。由於雙打的行爲方式,你開始「half」爲65,「calc」最終可能爲65.0000000001或64.99999998,參見[這裏] point_format) – 2015-04-04 02:04:32

回答

1

hours變量在您發佈的代碼中未分配。所以這個錯誤對我來說似乎是對的。

該代碼示例不完整,但考慮到您發佈的內容,未出現halfcalc實際上未指定。所以最可能的解釋是你要麼誤解錯誤信息(也就是說沒有說出你說的話),或者你沒有分享正確的代碼(即你包含的代碼不是代碼在發生錯誤時進行編譯)。

至於最後的錯誤,您的程序語句hours * thirtheenpercent = calc是無效的語法。編譯器可能會嘗試將其解釋爲變量聲明,其中hours是類型,而thirtheenpercent變量正在聲明爲該類型的指針,並使用變量calc所保存的值進行初始化。

這顯然不是你的意思,當然,因爲hours不是一種類型,所以語句無法成功編譯。

可能你的意思是calc = hours * thirtheenpercent?你的問題很難說清楚。

您似乎有其他算法問題。但是沒有看到你的代碼應該做什麼的實際規範,很難確定代碼應該是什麼樣子。根據評論,這個算法可能會像你想要的那樣工作,這是值得懷疑的。你從130%的13%開始,然後(也許)迭代地處理該值的倍數。但沒有13%的倍數等於50%,因此沒有倍數(130的13%)可以等於(130的50%)。

最重要的是,作爲評論者埃德吉布斯說,處理浮點運算,這是完全可能的,halfcalc從未彼此相等甚至算法是有意義的。你可能會非常接近,但不是兩個值實際上相同的地方。

+0

謝謝你,我完全忘了我需要在「=」的左邊有「calc」。一旦我確定除了「小時」問題之外,我所有的問題都消失了。我通過在開始時將它等於0來解決這個問題。現在一切工作正常:-)我會編輯我的代碼,所以我可以告訴你我做了什麼:-D – SprJD7903 2015-04-05 01:30:45

+0

順便說一句,這一切都必須處理一小時後仍留在體內的咖啡因的量,然後多少在24小時後如果有人每小時只有一個杯子持續24小時,將會保留下來,然後剩下一半時間需要多長時間。 – SprJD7903 2015-04-05 01:34:55

+0

@ SprJD7903:有趣的問題。問題的第二部分很容易,因爲咖啡因的半衰期是一個已知的事實:大約5個小時。但想象一下,有人喝了25杯咖啡,每杯相隔一小時,這是有趣的。這是一個專門的咖啡飲水器。 :)無論如何,我很高興答案能夠讓你回到正軌。 – 2015-04-05 02:05:44

相關問題