我不斷將值寫入變數,并希望有一個單獨的變數來跟蹤第一個變數達到的最大值。搜索“保存變數最大值”會回傳大量關于變數型別可以表示的最大值的資訊。
希望它看起來像:
while (device == connected)
{
float x = (float) read.device(1);
float maxvalue = 0.00;
if (x > maxvalue)
{
maxvalue = max(x); //max() is a function I'd like to implement if one isn't already available
}
}
顯然,此示例中的語法不正確,但我展示它是為了大致了解我在尋找什么。
x 的值每秒不斷變化多達 30 次,我只想跟蹤自進入 while 回圈以來它看到的最高值。這看起來很簡單,我覺得我錯過了一些東西......
uj5u.com熱心網友回復:
將宣告移出回圈,然后選擇 2 個:
if (x > maxvalue) maxvalue = x;
或者
maxvalue = Math.Max(maxvalue, x);
現在,您在每次迭代中將 maxvalue 重置為 0.0,因此每個 > 0 的值都變為 maxvalue。
所以
float maxvalue = 0.00;
while (device == connected)
{
float x = (float) read.device(1);
maxvalue = Math.Max(maxvalue, x);
}
我建議始終使用 Math.Max 而不是 if 陳述句,因為它還可以處理像 NaN 這樣的浮點數的極端情況。
uj5u.com熱心網友回復:
以下是一些替代方案:
float maxvalue = 0.0f;
while (device == connected)
{
float x = (float)read.device(1);
if (x > maxvalue)
{
maxvalue = x;
}
}
或者:
float maxvalue = 0.0f;
while (device == connected)
{
float x = (float)read.device(1);
maxvalue = Math.Max(maxvalue, x);
}
或者:
float maxvalue = 0.0f;
while (device == connected)
{
float x = (float)read.device(1);
maxvalue = x > maxvalue ? x : maxvalue;
}
或制作IEnumerable<float>方法:
public IEnumerable<float> DeviceValues()
{
while (device == connected)
{
yield return (float)read.device(1);
}
}
那么它只是:
float maxvalue = DeviceValues().Max();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417960.html
標籤:
