我的应用中的SeekBar
未产生正确的结果。 SeekBar
从0开始,因此sbSyst
为每个值添加70,sbDias
为每个值添加40。
部分代码:
public void ShowText() {
int inOne = sbSyst.getProgress();
int inTwo = sbDias.getProgress();
if ((inOne >= 0 && inOne <= 20) && (inTwo >= 0 && inTwo <= 20)) {
tvRes.setText("LOW");
tvRes.setBackgroundColor(Color.parseColor("#7659F5"));
}
else if ((inOne >= 21 && inOne <= 50) && (inTwo >= 21 && inTwo <= 40)) {
tvRes.setText("IDEAL");
tvRes.setBackgroundColor(Color.parseColor("#0BA319"));
}
else if ((inOne >= 51 && inOne <= 70) && (inTwo >= 41 && inTwo <= 50)) {
tvRes.setText("PRE-HIGH");
tvRes.setBackgroundColor(Color.parseColor("#D7EF0C"));
}
else if ((inOne >= 71 && inOne <= 120) && (inTwo >= 51 && inTwo <= 60)) {
tvRes.setText("HIGH");
tvRes.setBackgroundColor(Color.parseColor("#F70729"));
}
}
根据上面的代码,以下应该生成“HIGH”作为文本,而不是显示“IDEAL”
以下是整个代码的Pastebin: http://pastebin.com/C91SpbBg
请帮我解决这个问题。
更新:添加以下内容并且它正在100%
工作public void ShowText() {
int inOne = sbSyst.getProgress() + 70;
int inTwo = sbDias.getProgress() + 40;
Log.i("SYSTOLIC SHOWTEXT", String.valueOf(inOne));
Log.i("DIASTOLIC SHOWTEXT", String.valueOf(inTwo));
if ((inOne >= 70 && inOne <= 90) && (inTwo >= 40 && inTwo <= 60)) {
tvRes.setText("LOW");
tvRes.setBackgroundColor(Color.parseColor("#7659F5"));
}
if ((inOne >= 70 && inOne <= 90) && (inTwo >= 61 && inTwo <= 80)) {
tvRes.setText("IDEAL");
tvRes.setBackgroundColor(Color.parseColor("#0BA319"));
}
if ((inOne >= 70 && inOne <= 90) && (inTwo >= 81 && inTwo <= 90)) {
tvRes.setText("PRE-HIGH");
tvRes.setBackgroundColor(Color.parseColor("#C9DF0B"));
}
if ((inOne >= 70 && inOne <= 90) && (inTwo >= 91 && inTwo <= 100)) {
tvRes.setText("HIGH");
tvRes.setBackgroundColor(Color.parseColor("#F70729"));
}
if ((inOne >= 91 && inOne <= 120) && (inTwo >= 40 && inTwo <= 80)) {
tvRes.setText("IDEAL");
tvRes.setBackgroundColor(Color.parseColor("#0BA319"));
}
if ((inOne >= 91 && inOne <= 120) && (inTwo >= 81 && inTwo <= 90)) {
tvRes.setText("PRE-HIGH");
tvRes.setBackgroundColor(Color.parseColor("#C9DF0B"));
}
if ((inOne >= 91 && inOne <= 120) && (inTwo >= 91 && inTwo <= 100)) {
tvRes.setText("HIGH");
tvRes.setBackgroundColor(Color.parseColor("#F70729"));
}
if ((inOne >= 121 && inOne <= 140) && (inTwo >= 40 && inTwo <= 90)) {
tvRes.setText("PRE-HIGH");
tvRes.setBackgroundColor(Color.parseColor("#C9DF0B"));
}
if ((inOne >= 121 && inOne <= 140) && (inTwo >= 91 && inTwo <= 100)) {
tvRes.setText("HIGH");
tvRes.setBackgroundColor(Color.parseColor("#F70729"));
}
if ((inOne >= 141 && inOne <= 190) && (inTwo >= 40 && inTwo <= 100)) {
tvRes.setText("HIGH");
tvRes.setBackgroundColor(Color.parseColor("#F70729"));
}
}
答案 0 :(得分:2)
根据上面的图片,inOne=82
和inTwo=26
的值。现在查看代码,显示HIGH
:
if ((inOne >= 71 && inOne <= 120) && (inTwo >= 51 && inTwo <= 60))
事实并非如此,因为您使用的是&&
运算符。这意味着两者都应该在高范围内。这就是问题所在。
解决方案:当其中一个值在High
范围内且Low
范围内的值等等时,请考虑如何处理这种情况。然后相应地编写你的逻辑。 (示例:您也可以使用||
运算符,这意味着如果其中任何一个为“HIGH”显示为高。)
更新:这是一个good source,您可以在其中阅读有关解释血压读数的不同if/else
规则。
更新2:我有空闲时间。以下是基于上述链接的showText()
方法的实现:
public void ShowText() {
int inOne = sbSyst.getProgress() + 70;
int inTwo = sbDias.getProgress() + 40;
if((inOne >= 140) || (inTwo >= 90)) {
// condition 1: if 140 or more systolic or 90 or more diastolic means HIGH BP
tvRes.setText("HIGH");
tvRes.setBackgroundColor(Color.parseColor("#F70729"));
}
else if((inOne <= 90) || (inTwo <= 60)){
// (condition 1 is not met)
// condition 2: if 90 or less systolic or 60 or less diastolic means LOW BP
tvRes.setText("LOW");
tvRes.setBackgroundColor(Color.parseColor("#7659F5"));
}
else if((inOne >= 120) || (inTwo >= 80)) {
// (condition 1 and 2 are not met ==> NOT HIGH, NOT LOW)
// condition 3: if 120 or more systolic or 80 or more diastolic means PRE-HIGH BP
tvRes.setText("PRE-HIGH");
tvRes.setBackgroundColor(Color.parseColor("#D7EF0C"));
}
else if((inOne >= 90) || (inTwo >= 60)) {
// (condition 1, 2 and 3 are not met ==> NOT HIGH, NOT LOW, NOT PRE-HIGH)
// condition 4: if 90 or more systolic or 60 or more diastolic means IDEAL BP
tvRes.setText("IDEAL");
tvRes.setBackgroundColor(Color.parseColor("#0BA319"));
}
}
答案 1 :(得分:2)
您的代码中存在逻辑错误。因为你使用了&amp;&amp;和&amp;&amp;运营商。
原因如下:
inOne = 82且inTwo = 26
else if ((inOne >= 71 && inOne <= 120) && (inTwo >= 51 && inTwo <= 60))
在上面的if条件中,它检查inOne是否位于71和120之间,这里它是因为inOne是82.所以这变为真。现在你的第二个条件就是失败了。
它检查inTwo是否介于51和60之间,而不是因为值为26,所以返回false。你的if条件现在是:
if((true) && (false)){
// Set Text HIGH
}
因为您使用了&amp;&amp;运算符,只有当两个条件都为真时才会执行此条件,而不是在您的情况下。所以它永远不会在其中执行代码!
答案 2 :(得分:1)
我会将其作为2D矩阵的灵活解决方案来实现。如果每行对应于收缩压的范围,则每行中的每列对应于舒张压范围,矩阵(行,列)中的值是结果值......
给定收缩压找到对应的行,在行内找到使用舒张压和读出值对应的列。
然后将值映射到带有结果的框的文本/颜色。
这将允许您针对不同的性别,年龄,体重,种族......进行多次映射......只需一个代码,加上无法使用您的AND / OR代码进行建模的组合......