如何轻松解决kotlin字符串算数等式计算

注意:

  下面代码都是用kotlin代码开发,其实跟java语言开发差不多,算法思路是一样。
该算法只能对加、减、乘、除进行基本运算,对复杂等式不能计算,记住,不要等一下说博主坑你们。

一、把字符串等式转化为子字符串

首先,把字符串转换为字符数组,并对每一个字符进行判断,该字符是数字,设置一个变量,来存储数字,当下一个字符是运算符,先判断存储数字变量中是否为空,如果不为空,就把该变量数据添加到字符串集合中,并把字符也进行存储,详细代码如下:

 private fun countNum(result: String): Int {
        val numArray: CharArray = result.toCharArray()
        val m = ArrayList<String>()

        var num: String = ""
        for (n in 0..numArray.size - 1) {
            val char = numArray[n].toString()
            when (char) {
                "-", "+", "*", "/" -> {
                    if (!num.isEmpty()) {
                        m.add(num)
                        num = ""
                    }

                    num += char
                    m.add(num)
                    num = ""
                }
                else -> {
                    num += char
                    if (n == numArray.size - 1) {
                        m.add(num)
                    }
                }
            }

        }
        return num(m)
    }

二、对等式进行运算。

通过集合中数据获取乘、除运算符号个数,并通过一个变量存储以来,计算个数方便到时候循环计算乘、除次数,接下来进行计算,遍历集合中数据,进行计算运算符号前一个数字和后一个数字,并存储到集合中,移除参加运算数据。
先计算乘除,再计算加减
 private fun num(number: ArrayList<String>): Int {
        var one: Float
        var two: Float
        var result: Float = 0f
        var count: Int = 0
        var total:Int=0
        var flag:Int=0
        //计算出有乘除个数
        (0..number.size - 1)
                .filter { number[it] == "*" || number[it] == "/" }
                .forEach { count += 1 }

        for (m in 0..count) {
            loop@ for (n in 0..number.size - 2) {
                val m = number[n]
                when (m) {
                    "*", "/" -> {
                        one = number[n - 1].toFloat()
                        two = number[n + 1].toFloat()
                        if ("*" == m) {
                            result = one * two
                        } else if ("/" == m) {
                            result = one / two
                        }
                        number[n] = result.toString()

                        number.removeAt(n + 1)
                        number.removeAt(n - 1)
                        break@loop
                    }
                }

            }
        }
        System.out.println("数据1"+number.toString())
        for(m in 0..number.size-1){
            val n = number[m]
            when(n){
                "+","-" ->{
                    if ("+" == n) {
                        flag=0
                    } else if ("-" == n) {
                        flag=1
                    }

                }
                else ->{
                    if(flag==0){
                        System.out.println(number[m].toFloat().toInt())
                        total += number[m].toFloat().toInt()
                    }else if(flag==1){
                        total -= number[m].toFloat().toInt()
                    }
                }
            }
        }

        System.out.println("数据2"+number.toString())
        return total
    }


到这里就结束,其实很简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值