Q: Как установить переменную, которая используется для условия if - PullRequest
0 голосов
/ 03 декабря 2018

Мой код как под ним, и что условия if или while слишком длинные, поэтому я хочу использовать переменную как условие, как я могу это сделать?

мой пример кода:

aTempArray.add(sInput[iStringOnPosition].toString())
//                    bCheckNextisDigit=true
                    while (iStringOnPosition + 1 < sInput.length &&
                        (sInput[iStringOnPosition + 1]).isDigit() || sInput[iStringOnPosition + 1] == '.') { 
                        aTempArray[aTempArray.size - 1] = aTempArray[aTempArray.size - 1] +
                                sInput[iStringOnPosition + 1]
                        iStringOnPosition++
                    }

и

if (sInput[iStringOnPosition] == ' ') {
                while (iStringOnPosition < sInput.length && sInput[iStringOnPosition] == ' ') {
                    iStringOnPosition++
                }
            } else if (sInput[iStringOnPosition] == '-' && (iStringOnPosition == 0 //checking value for negativity

                        || sInput[iStringOnPosition - 1] == '-'
                        || sInput[iStringOnPosition - 1] == '+'
                        || sInput[iStringOnPosition - 1] == '*'
                        || sInput[iStringOnPosition - 1] == '/')
            ) {
                bNegativePresent = true
                iStringOnPosition++

            } else if ((sInput[iStringOnPosition] == '-'             //checking for repeating operators
                        || sInput[iStringOnPosition] == '+'
                        || sInput[iStringOnPosition] == '*'
                        || sInput[iStringOnPosition] == '/') && (iStringOnPosition == 0
                        || sInput[iStringOnPosition - 1] == '-'
                        || sInput[iStringOnPosition - 1] == '+'
                        || sInput[iStringOnPosition - 1] == '*'
                        || sInput[iStringOnPosition - 1] == '/')
            ) {
                bError = true
                return "Error: two or more operators in a row"
            }

и я хочу написать вот так

aTempArray.add(sInput[iStringOnPosition].toString())
var bCheckNextisDigit = iStringOnPosition + 1 < sInput.length &&
                            (sInput[iStringOnPosition + 1]).isDigit() || sInput[iStringOnPosition + 1] == '.'
                        bCheckNextisDigit=true
                        while (bCheckNextisDigit) { 
                            aTempArray[aTempArray.size - 1] = aTempArray[aTempArray.size - 1] +
                                    sInput[iStringOnPosition + 1]
                            iStringOnPosition++
                        }

и

if (first_condition) {
                        iStringOnPosition++
                    }
                } else if (second_condition) {
                    bNegativePresent = true
                    iStringOnPosition++

                } else if (last_condition) {
                    bError = true
                    return "Error: two or more operators in a row"
                }

Пожалуйста, помогите разобраться с этой проблемой

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

я так переписываю, как насчет этого?

var blank_cond: Boolean = false
var blank_loop_cond: Boolean = false
var negertive_First_cond: Boolean = false
var negertive_sec_cond1: Boolean = false
var negertive_sec_cond2: Boolean = false
var negertive_sec_cond3: Boolean = false
var negertive_sec_cond4: Boolean = false
var negertive_sec_cond5: Boolean = false
var negertive_sec_condToT: Boolean = false


    //check Blooean blank
    blank_cond = sInput[iStringOnPosition] == ' '
    //check Blooean negertive
    negertive_First_cond = sInput[iStringOnPosition] == '-'
    negertive_sec_cond1 = iStringOnPosition == 0
    negertive_sec_cond2 = sInput[iStringOnPosition - 1] == '-'
    negertive_sec_cond3 = sInput[iStringOnPosition - 1] == '+'
    negertive_sec_cond4 = sInput[iStringOnPosition - 1] == '*'
    negertive_sec_cond5 = sInput[iStringOnPosition - 1] == '/'
    negertive_sec_condToT = negertive_First_cond &&
            (negertive_sec_cond1 || negertive_sec_cond2 || negertive_sec_cond3 || negertive_sec_cond4 || negertive_sec_cond5)
    bCheckNegative = negertive_sec_condToT
    when (true) {
        bCheckBlank -> {
            blank_loop_cond = true
            while (blank_loop_cond) {
                blank_loop_cond = iStringOnPosition < sInput.length && sInput[iStringOnPosition] == ' '
                iStringOnPosition++
            }
        }
        bCheckNegative -> {
            bNegativePresent = true
            iStringOnPosition++
        }
    }

сделать что-то, что я должен исправить?

0 голосов
/ 03 декабря 2018

Вы можете сохранить их все в логических значениях, если хотите.

Примерно так:

first_condition = sInput[iStringOnPosition] == ' '
second_condition = sInput[iStringOnPosition] == '-' && (iStringOnPosition == 0 || sInput[iStringOnPosition - 1] == '-' || sInput[iStringOnPosition - 1] == '+' || sInput[iStringOnPosition - 1] == '*' || sInput[iStringOnPosition - 1] == '/')

или

second_condition1 = iStringOnPosition == 0
second_condition2 = sInput[iStringOnPosition - 1] == '-'
second_condition3 = sInput[iStringOnPosition - 1] == '+'
second_condition4 = sInput[iStringOnPosition - 1] == '*'
second_condition5 = sInput[iStringOnPosition - 1] == '/'

second_conditionTotal = first_condition && (second_condition1 || second_condition2 || second_condition3 || second_condition4 || second_condition5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...