lundi 7 décembre 2015

Sorting Algorithm advise if-else

Hello good people of StackOverflow! I need a bit of guidance on how to sort the values inside of my array..

So, I have 2 Arrays for X and Z accelerometer readings. I want to sort them out into 4 categories Excellent, Good, Average, and Poor. Each of this categories have their own array.

after all the values of X and Z arrays are sorted and the values of 1 and 0 are inserted into each of the Excellent, Good, Average, and Poor arrays,, I want to pass the grade of the highest value from the 4 categories(adding the data inside each category array).

The problem is that the if-else statement doesn't go the next else if, even though the reading is less than 1 and and more than -1.. So by then end, I always get the 'Excellent' grade even though I shook my phone like crazy..

here are the range: Excellent: More than -1 and less than 1 Good: Less than -2 and more than 2 Average: less than -4 and more than 4 Poor: less than -6 and more than 6

        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://ift.tt/1OfjFBY";               

            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);
        }

I also had tried with other methods like this:

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
    }

Aucun commentaire:

Enregistrer un commentaire