显示范围内给定数字的倍数

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.forEachnumListnumMul7【参考方案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

以上是关于显示范围内给定数字的倍数的主要内容,如果未能解决你的问题,请参考以下文章

从给定范围中删除给定数字集的所有倍数

找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 范围是两个数字构成的数组,两个数字不一定按数字顺序排序。

找到给定范围内数字的最大最小差

如何创建一个 NSPredicate 过滤给定范围内的所有字符,包括数字/数字?

Python列表如何识别给定数字在挑战问题范围内[关闭]

如何找到给定范围内除以给定数字时具有一定余数的值的数量?