显示范围内给定数字的倍数
Posted
技术标签:
【中文标题】显示范围内给定数字的倍数【英文标题】:Show multiples of a given number within a range 【发布时间】:2019-06-25 14:34:46 【问题描述】:如何以更好的方式修复以下代码(从第一个元素迭代到最后一个元素的替代方法?我的目标是以最有效和最简单的方式编写 kotlin 代码
我正在寻找有人告诉我而不是 n/7 我应该写什么来获得相同的代码结果
val numList = 1..20
val numMul7= numList.map it *7
// here what else instead of n/7 can i use to get same result and it iterate the range from the first element to the last one
numMul7.forEach n -> println("$n/7 * 7 = $n") ;
这里有输出:
1 * 7 = 7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
....
12 * 7 = 84
13 * 7 = 91
14 * 7 = 98
15 * 7 = 105
16 * 7 = 112
17 * 7 = 119
18 * 7 = 126
19 * 7 = 133
20 * 7 = 140
编辑 2: @Saurabh Patel 或任何其他专家 你能告诉我为什么下面的代码不起作用吗?
val numList = 1..20
val numMul7= numList.map it *7
numMul7.forEach n -> println("$it * 7 = $n") ;
【问题讨论】:
【参考方案1】:这可能就是你要找的东西
val numList = 1..20
numList.forEach
println("$it * 7 = $it*7")
【讨论】:
感谢您的回答,您的代码比我轻得多,我会接受您的回答作为对此线程的回复,但只是最后一个问题,我只是好奇,如果我必须使用地图,出于学习目的,如何我可以迭代吗?你能编辑你的帖子并告诉我如果我必须使用地图,答案会如何,谢谢 我编辑我的问题以澄清我的意思,请参阅编辑 2,谢谢 @Jack 在您的编辑 2 中,您错误地使用了名称“它”。更多信息请参考this 我参考了您的链接,但找不到答案,请告诉我如何更正edit2,谢谢【参考方案2】:对于这段代码,你有一个错字:
val numList = 1..20
val numMul7= numList.map it * 7
numMul7.forEach n -> println("$it * 7 = $n")
应该是:
val numList = 1..20
val numMul7= numList.map it * 7
numMul7.forEach n -> println("$n * 7 = $n")
您不能在forEach
中使用it
,因为您将变量命名为n
。
或者,同样的事情可以使用it
:
val numList = 1..20
val numMul7= numList.map it * 7
numMul7.forEach println("$it * 7 = $it")
【讨论】:
对不起,没有按照您的要求工作,您的答案在输出中产生了与我的目标不同的结果:7 * 7 = 7 --------- 14 * 7 = 14 ---- -- 21 * 7 = 21 ..... 面部护理。我没有运行代码。如果不撤消乘法,您将无法使用numMul7.forEach
。您应该改用numList.forEach
或numList
和numMul7
。【参考方案3】:
你可以在一行中完成:
(1..20).map it * 7 .forEach println("$it/7 * 7 = $it")
或者只使用forEach
函数:
(1..20).forEach println("$it * 7 = $it*7")
如果您需要将结果保存在变量中:
val listOfMultipliers = (1..20).map it * 7
如果我们使用更抽象的方式:
fun getMultipliersBy(range: IntRange, multiplier: Int): List<Int>
return range.map it * multiplier
// we can call it like this
getMultipliersBy(1..20, 7).forEach println("$it/7 * 7 = $it")
getMultipliersBy(1..40, 10).forEach println("$it/10 * 10 = $it")
使用扩展功能:
fun IntRange.getMultipliersBy(multiplier: Int): List<Int>
return map it * multiplier
//call it like this
(1..20).getMultipliersBy(7).forEach println("$it/7 * 7 = $it")
(1..40).getMultipliersBy(10).forEach println("$it/10 * 10 = $it")
【讨论】:
反响很好!【参考方案4】:在玩过代码之后,这是另一种方式,但谢尔盖的回答是最干净的,谢谢
val numList = 1..20
val numMul7= numList.map it
numMul7.forEach n -> println("$n * 7 = $7*n") ;
【讨论】:
【参考方案5】:您可以暂时跟踪原始值和计算值,然后将其打印并映射到计算值:
val numMul7 = (1..20).map it to it * 7 .map (orig, calc) ->
calc.also println("$orig * 7 = $calc")
作用域函数also
用于记录结果的副作用,对calc
没有任何作用。
【讨论】:
你用的是什么版本?我看不出它不应该起作用的原因。 fwiw,我在 1.3,但很确定它会以 >= 1.1 运行以上是关于显示范围内给定数字的倍数的主要内容,如果未能解决你的问题,请参考以下文章
找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 范围是两个数字构成的数组,两个数字不一定按数字顺序排序。