我需要一些有关如何对数组中的值进行排序的指导。
因此,我有2个Arrays
X和Z加速度计读数。我想将它们分为4类:优秀,好,平均和差。每个类别都有自己的数组。
在将X和Z的所有值arrays
排序后,将1和0的值插入到Excellent,Good,Average和Poor数组中的每一个之后,我要传递4个类别中最高值的等级(将每个类别数组中的数据)。
问题在于,即使读数小于1且大于-1 ,if-else statement
也不会继续执行下一个操作else if
。因此,到那时,即使我疯狂地摇动手机,我也始终会获得“优秀”等级。
范围如下:
for(int i = 0; i < ArrayX.size(); i++){
// sumX = (sumX + Integer.parseInt(String.valueOf(ArrayX.get(i))));
// sumY = (sumY + Integer.parseInt(String.valueOf(ArrayY.get(i))));
X = String.valueOf(ArrayX.get(i));
Y = String.valueOf(ArrayY.get(i));
Z = String.valueOf(ArrayZ.get(i));
float valX = Float.parseFloat(X);
float valZ = Float.parseFloat(Z);
if(valX<excellentRate||valX>(-excellentRate))
{
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(1);
}
else if(valX<=goodRate||valX>=(-goodRate)){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(1);
ArrayExcellent.add(0);
}
else if(valX<=averageRate||valX>=(-averageRate)){
ArrayPoor.add(0);
ArrayAverage.add(1);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
else if(valX<poorRate||valX>(-poorRate)){
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
if(valZ<(0.00f)||valZ>0.00f)
{
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(1);
}
else if(valZ<=(-2.00f)||valZ>=2.00f){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(1);
ArrayExcellent.add(0);
}
else if(valZ<=(-4.00f)||valZ>=4.00f){
ArrayPoor.add(0);
ArrayAverage.add(1);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
else if(valZ<(-6.00f)||valZ>4.00f){
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
//codes for sending testSet Details
System.out.println(">>>>>>>>>>>>>>>>>>> "+ " TS= " +TS_ID + " TSA= "+ TSA_ID + X + " " + Y + " " + Z);
String jsonOutput = "http://172.20.34.112/IBBTS_WebService_MobileAndDevice/Service1.asmx/setAccReadings";
if (isOnline()) {
requestAccelData(jsonOutput);
}else {
Toast.makeText(ResultSend.this, "Network isn't available", Toast.LENGTH_LONG).show();
}
}
for (int j=0; j<ArrayExcellent.size(); j++){
sumPoor = sumPoor +Integer.parseInt(String.valueOf(ArrayPoor.get(j)));
sumAverage = sumAverage + Integer.parseInt(String.valueOf(ArrayAverage.get(j)));
sumGood = sumGood + Integer.parseInt(String.valueOf(ArrayGood.get(j)));
sumExcellent = sumExcellent + Integer.parseInt(String.valueOf(ArrayExcellent.get(j)));
}
if(sumExcellent>=sumGood && sumExcellent>=sumAverage && sumExcellent>=sumPoor )
grade ="Excellent";
else if(sumGood>=sumExcellent && sumGood>=sumAverage && sumGood>=sumPoor){
grade ="Good";
}
else if(sumAverage>=sumExcellent && sumAverage>=sumGood && sumAverage>=sumPoor){
grade ="Average";
}
else if(sumPoor>=sumExcellent && sumPoor>=sumGood && sumPoor>=sumAverage){
grade ="Poor";
}
Intent intSummary = new Intent(ResultSend.this, ResultSummary.class);
intSummary.putExtra("gradePassed", grade);
intSummary.putExtra("TestName", TestName);
startActivity(intSummary);
}
我还尝试了其他类似的方法:
checker = compare(valX, excellentRateX);
if(checker == 1){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(1);
checker = 0;
checker = compare(valX, goodRateX);
}
else if(checker == -1){
checker = compare(valX, goodRateX);
}
else if(checker == 1){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(1);
ArrayExcellent.add(0);
checker = 0;
checker = compare(valX, averageRateX);
}
else if(checker == -1){
checker = compare(valX, averageRateX);
}
else if(checker == 1){
ArrayPoor.add(0);
ArrayAverage.add(1);
ArrayGood.add(0);
ArrayExcellent.add(0);
checker = 0;
checker = compare(valX, poorRateX);
}
else if(checker == -1){
checker = compare(valX, poorRateX);
}
else if(checker == 1){
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
checker = 0;
}
checker = compare(valZ, excellentRateZ);
if(checker == 1){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(1);
checker = 0;
checker = compare(valZ, goodRateZ);
}
else if(checker == -1){
checker = compare(valZ, goodRateX);
}
else if(checker == 1){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(1);
ArrayExcellent.add(0);
checker = 0;
checker = compare(valZ, averageRateZ);
}
else if(checker == -1){
checker = compare(valZ, averageRateZ);
}
else if(checker == 1){
ArrayPoor.add(0);
ArrayAverage.add(1);
ArrayGood.add(0);
ArrayExcellent.add(0);
checker = 0;
checker = compare(valZ, poorRateZ);
}
else if(checker == -1){
checker = compare(valZ, poorRateZ);
}
else if(checker == 1){
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
checker = 0;
}
public static int compare(float f1, float f2) {
if (f1 < f2 && f1 > -f2){
return 1;
} // value is within the specifications
else{
return -1;
} // value is outside the specifications
}
根据以下建议编辑了代码,现在可以使用了!
if(valX <excellentRateX && valX >(-excellentRateX))
{
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(1);
}
else if(valX <= goodRateX && valX >= (-goodRateX)){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(1);
ArrayExcellent.add(0);
}
else if(valX <= averageRateX && valX>=(-averageRateX)){
ArrayPoor.add(0);
ArrayAverage.add(1);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
else if(valX <= poorRateX && valX >= (-poorRateX)){
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
else {
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
if(valZ<excellentRateZ && valZ>-excellentRateZ)
{
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(1);
}
else if(valZ <= goodRateZ && valZ >= (-goodRateZ)){
ArrayPoor.add(0);
ArrayAverage.add(0);
ArrayGood.add(1);
ArrayExcellent.add(0);
}
else if(valZ <= averageRateZ && valZ>=(-averageRateZ)){
ArrayPoor.add(0);
ArrayAverage.add(1);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
else if(valZ < poorRateZ && valZ>(-poorRateZ)){
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
else {
ArrayPoor.add(1);
ArrayAverage.add(0);
ArrayGood.add(0);
ArrayExcellent.add(0);
}
在第一个代码段中,如果有condition,我可以看到以下内容:
if(valX<excellentRate||valX>(-excellentRate))
如果为excellentRate = 1
,则将其解释为
如果valX小于1或valX大于-1
由于每个实数都是“小于1或大于-1”,因此此条件将始终为真。
您应该使用:
if(valX<excellentRate && valX>(-excellentRate))
并对其他if语句执行相同操作。
PS:我的声誉很低,因此无法在评论中指出这一点,因此我正在写一个答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句