Search code examples
haxe

what can I do to my code don´t delete a 0 in a array?


I'm trying to make a calculator in Haxe, it is almost done but have a bug. The bug is happening every time that some part of the equation result in 0.

This is how I concatenate the numbers and put i the array number, the cn is the variable used to receive the digit and transform in a number, the ci is a specific counter to make the while work well and the c is the basic counter that is increased to a background while used to read the array (input) items:

            var cn  = '';
            var ci = c;

            if (input[c] == '-') {
                number.push('+');
                cn = '-';
                ci ++;
            }

            while (input[ci] == '0' || input[ci] == '1' || input[ci] == '2' || input[ci] == '3' || input[ci] == '4' || input[ci] == '5' || input[ci] == '6' || input[ci] == '7' || input[ci] == '8' || input[ci] == '9' || input[ci] == '.') {

                if(ci == input.length) {
                    break;
                }

                cn += input[ci];
                ci++;
            }

            number.push(cn);
            c += cn.length;

This is the part of the code used to calculate the addition and subtraction

    for (i in 0 ... number.length) { trace(number); if (number[c] == '+') { number[c-1] = ''+(Std.parseFloat(number[c-1])+Std.parseFloat(number[c+1])); number.remove(number[c+1]); number.remove(number[c]); }

            else {
                c++;
            }
        }

Example: 12+13-25+1: When my code read this input, it transform in a array ([1,2,+,1,3,-,2,5,+,1]), then the code concatenate the numbers ([12,+,13,-,25,+,1]) and for lastly it seeks for the operators(+,-,* and /) to make the operation (ex: 12+13), substituting "12" for the result of the operation (25) and removing the "+" and the "13". This part works well and then the code does 25-25=0.

The problem starts here because the equation then becomes 0+1 and when the code process that what repend is that the 0 vanish and the 1 is removed and the output is "+" when the expected is "1".


Solution

  • remove in this case uses indexOf and is not ideal, suggest using splice instead.

    number.splice(c,1);
    number.splice(c,1);
    

    https://try.haxe.org/#D3E38