2

因此,我正在創建一個應用程序,以根據一系列變量計算出值(請參閱this gist中的完整代碼)。的變量是:與下拉選項相關的數值

  • 性別
  • 年齡
  • 重量
  • 肌酐

這裏的應用程序是什麼樣子:

Showing the UI off

爲了簡化有些過程帽子我決定把性別選擇的下拉菜單,這給我帶來了一些問題,因爲我有它設置像這樣:

Drop Down properties

並與按鈕相關的數學看起來像這樣:

function CalculateButtonPushed(app, event) 
      gender = app.PatientGenderDropDown.Value ; 
      age = app.PatientAgeEditField.Value ; 
      weight = app.LeanBodyWeightEditField.Value ; 
      serum = app.SerumCreatinineEditField.Value ; 
      final = (gender*(age)*weight)/(serum) ; 
      app.ResultEditField.Value = final ; 
     end 
    end 

運行本提供了以下錯誤:據我所知

Error using matlab.ui.control.internal.model.AbstractNumericComponent/set.Value (line 104) 'Value' must be numeric, such as 10.

,值I輸入到ItemsData被數值。我錯過了什麼,或者有更好的方法來做到這一點?

謝謝

詹姆斯

+0

你是如何初始化變量的? javascript會在第一次給它賦值時指出它的類型,因此var gender =「」會使性別成爲一個字符串。 var gender = 0會使性別成爲int。 – Mike

+0

@ Mmcgowa3我使用的是matlab應用程序設計器,因爲它似乎是我可用的唯一GUI生成器之一。它不會讓你編輯代碼的某些部分由於某些原因,包括這一部分: https://gist.github.com/jrmswell/4a2c483245b987cb96d4ffd5aa61482c#file-gender-drop-down 是哪個值出現在那裏儲存 – jrmswell

回答

0

如果你把在適當的線路有問題的文件斷點(通過運行下面的代碼),

dbstop in uicomponents\+matlab\+ui\+control\+internal\+model\AbstractNumericComponent.m at 87 

,你可以看到在下面您的工作區,點擊按鈕後:

workspace snapshot

這裏有兩個不同的問題,兩者都可以通過查看newValue驗證代碼(在AbstractNumericComponent.m出現)來標識:

% newValue should be a numeric value. 
% NaN, Inf, empty are not accepted 
validateattributes(... 
    newValue, ... 
    {'numeric'}, ... 
    {'scalar', 'real', 'nonempty'} ... 
    ); 

這裏的問題:

  1. 新價值是一個矢量NaN
    這樣做的原因是在這一行:

    final = (gender*(age)*weight)/(serum) ; 
    

    其中serum0價值 - 所以這是你應該照顧的第一件事。

  2. 的新值是矢量NaN
    這是一個單獨的問題,因爲set.Value函數(當您將某些內容分配到Value字段中時會隱式調用該函數)期望得到標量。發生這種情況是因爲gender1x4 char array - 所以它被視爲4個單獨的數字(即關於ItemsData是數字的假設是錯誤的)。在這種情況下,最簡單的解決方案是使用前的str2double。或者,將數據存儲在另一個位置 (如圖的私有屬性),確保是數字。

+0

非常感謝你。雖然我沒有明確地使用你的方法,但我發現把數字轉換成其他地方的工作。再次感謝你的幫助! – jrmswell

+0

不客氣:) –