• qinsi
    2022-01-04
    val left = exp.left val operator = exp.operator val right = exp.right 是不是可以写成 val (left, operator, right) = exp

    作者回复: 赞!

    共 5 条评论
    31
  • 王玉朋
    2022-01-04
    老师,135+99的加法竖式动画图是用什么做的?

    作者回复: 用PPT的动画一帧一帧做的。

    
    6
  • Geek_Adr
    2022-02-04
    V3实战 加 算法 !提高语言的手感? 坏学生偷懒 string.toBigInteger()

    作者回复: 嗯……实际工作中是更推荐的。

    
    3
  • 苍王
    2022-01-30
    private fun minusString(left: String, right: String): String { val result = StringBuilder() //判断是否结果位负数 val isMinus = (left.length < right.length || left.length == right.length && left[0] < right[0]) var leftIndex = left.length - 1 var rightIndex = right.length - 1 var _left = left var _right = right if (isMinus) { _left = right _right = left leftIndex = _left.length - 1 rightIndex = _right.length - 1 } var carry = 0 while (leftIndex >= 0 || rightIndex >= 0) { val leftVal = if (leftIndex >= 0) _left[leftIndex].digitToInt() else 0 val rightVal = if (rightIndex >= 0) _right[rightIndex].digitToInt() else 0 var sum: Int if (leftVal - rightVal < 0) { sum = leftVal - rightVal + 10 + carry carry = -1 } else { sum = leftVal - rightVal + carry carry = 0 } result.append(sum) leftIndex-- rightIndex-- } if (isMinus) { result.append("-") } return result.reverse().toString() } @Test fun testCalculateMinus1() { val calculatorV = CalculatorV3() val result = calculatorV.calculate("90-1") assertEquals("89", result) } @Test fun testCalculateMinus2() { val calculatorV = CalculatorV3() val result = calculatorV.calculate("1-9") assertEquals("-8", result) } @Test fun testCalculateMinus3() { val calculatorV = CalculatorV3() val result = calculatorV.calculate("233333333333333333333-1") assertEquals("233333333333333333332", result) }
    展开

    作者回复: 代码写的很不错,思路也比较清晰,只是还有一些边界条件没注意好。 能提供单元测试的代码也很不错,不过测试的case覆盖的不是很全面,比如说:"91-98"的情况,就会测试失败。

    共 2 条评论
    2
  • JL
    2022-01-05
    您好,想问一个关于单元测试的问题: 我在工作中assertEquals 和 assertThat().equals() 两种都遇到过 但是有人说 第二种更好一点。 想听听您的意见和建议。 之前网上搜了一下 也没有看到过说哪个好哪个坏

    作者回复: 首先,Kotlin官方没有提供assertThat()这样的语法支持。在Junit当中,assertThat()的优势在于它更加灵活一些。至于哪个好哪个坏肯定是无法一概而论的,它们肯定都有各自适用的场景。 我个人的理解是: assertEquals适合简单场景,assertThat()适合灵活一些的场景。

    
    2
  • droidYu
    2022-03-20
    老师,V1版本的代码输入 3 + 4 会报错:No enum constant Operation.+;需要输入3 ADD 4才能正常运行,是您标的①处的代码的问题Operation.valueOf()方法抛错,为什么要故意写错,是有什么设计要讲解吗?

    作者回复: 这是一个常见的错误用法,后续版本的做法才是对的,我打算在加餐里详细解释的。

    共 2 条评论
    1
  • 爱学习的小羊
    2022-02-23
    private fun minus(left: String, right: String): String { var maxNumber = String() var mainNumber = String() var resultMean = String() val data = left.length - right.length if (data > 0){ maxNumber = left mainNumber = right resultMean = "" }else if (data < 0){ maxNumber = right mainNumber = left resultMean = "-" }else{ var position = 0 while (left.get(position).digitToInt() == right.get(position).digitToInt()){ position++ } if (left.get(position).digitToInt() - right.get(position).digitToInt() > 0){ maxNumber = left mainNumber = right resultMean = "" }else{ maxNumber = right mainNumber = left resultMean = "-" } } val result = StringBuilder() var maxIndex = maxNumber.length - 1 var mainIndex = mainNumber.length - 1 var carry = 0 while (maxIndex >= 0 || mainIndex >= 0) { var leftVal = if (maxIndex >= 0) maxNumber.get(maxIndex).digitToInt() else 0 var rightVal = if (mainIndex >= 0) mainNumber.get(mainIndex).digitToInt() else 0 leftVal -= carry while (leftVal + carry * 10 < rightVal) { carry++ } val sum = leftVal + carry * 10 - rightVal if (sum in 1..9) { result.append(sum) } maxIndex-- mainIndex-- } return result.append(resultMean).reverse().toString() } 大佬这样写可吗
    展开

    作者回复: 总体思路是不错的,但没考虑到一种边界情况:“-91-90”。 这题最难的就是判断边界了,你可以基于“-91-90”的情况再分析下。

    
    1
  • JokerFake
    2022-01-06
    所以枚举那只能传ADD 不能传+ 这个bug是故意就给我们自己改的?

    作者回复: 嗯,这只是1.0理想的结构。也是因为枚举的valueOf有这个问题,所以在后面版本当中才会有其他的方式。

    
    1
  • 故事与酒
    2022-02-14
    大数加和乘 fun minusString(left:String,right:String):String{ val result = StringBuilder() var _left = left var _right = right var borrowNum = 0 //是否向前借位 var leftIndex = left.length -1 var rightIndex = right.length - 1 //判断是否是小-大 val isRightBig = left.length<right.length || left.length == right.length && left[0] < right[0] if (isRightBig){ _left = right _right = left leftIndex = _left.length - 1 rightIndex = _right.length - 1 } while(leftIndex >=0 || rightIndex >= 0){ val leftVal = if (leftIndex >= 0) _left.get(leftIndex).digitToInt() else 0 val rightVal = if (rightIndex >= 0) _right.get(rightIndex).digitToInt() else 0 val digitResult = leftVal - rightVal - borrow
    展开

    作者回复: 哎呀,是代码太长截断了吗?我这边看到的代码不完整。

    
    
  • 剑来
    2022-01-24
    讲一个不是很关键的东西,通过你这个方式拉取代码后,一般刚下来本地是没有start分支的,需要通过origin/start这个远程分支去checkout。

    作者回复: 感谢补充。 PS:不熟悉Git操作的小伙伴,可以看看这里。

    
    