【问题标题】:Q: How to set variable which use for if condition问:如何设置用于if条件的变量
【发布时间】:2018-12-03 00:36:05
【问题描述】:

我的代码如下所示 并且 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"
                }

请帮忙解决这个问题

【问题讨论】:

    标签: java android android-studio intellij-idea kotlin


    【解决方案1】:

    如果需要,您可以将它们全部保存为布尔值。

    像这样:

    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)
    

    【讨论】:

      【解决方案2】:

      我这样重写怎么样?

      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++
              }
          }
      

      做一些我必须解决的事情?

      【讨论】:

        猜你喜欢
        • 2018-12-15
        • 2017-08-04
        • 1970-01-01
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 2021-09-12
        相关资源
        最近更新 更多