【问题标题】:Creating a specific pattern with two-dimensional array in scala在scala中使用二维数组创建特定模式
【发布时间】:2019-04-25 06:36:17
【问题描述】:

所以我的问题是我想将二维 int 数组的值更改为 1,以便数组看起来像这样

0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0

我的函数中有一个参数“size”,它等于数组大小。所以无论数组大小如何,我都想创建这个模式

大小等于 9 的示例:

0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 0 0

哦,尺寸显然总是一个奇数,因此可以创建这个倾斜的正方形“形状”。请帮忙!!

【问题讨论】:

  • 你尝试了什么?似乎您的标签中不仅有 scala,而且没有显示您尝试过的代码。
  • 如果您使用一种语言编程,请不要发送不相关的语言标签。也请阅读the help pages,采取the SO tour,阅读有关how to ask good questions,以及this question checklist。最后学习如何创建minimal reproducible example
  • 好吧,我没有代码,因为我什至不知道如何解决这个问题。这就是我在这里问的原因
  • 嗨@MatiasBerglund,欢迎来到StackOverflow,这里不是问“这是我的问题,请给我一些代码”的地方也不是问“我怎么能做到这一点,而不给我代码”。您可能会在其他网站(例如 scala gitter channel)上获得帮助,但如果您证明您已经尝试过某些东西,即使在那里人们也会更愿意提供帮助 - 解决问题是您的任务!,我们可以帮助您解决特定于代码的问题。

标签: arrays scala multidimensional-array


【解决方案1】:

应该是这样的:

  def createDiamond(size: Int) = {
    require(size % 2 != 0, "size must be odd")
    def innerIterator(limit: Int) = {
      (0 until size).map{ column =>
        if(column > ((size / 2) + limit) || column < ((size / 2) - limit)) "0"
        else "1"
      }.mkString(" ") + "\n"
    }

    val str = (0 until size).map{ row => if(row <= size / 2) innerIterator(row) else innerIterator(size - row - 1)}.mkString("")
    println(str)
  }

【讨论】:

    【解决方案2】:
    def createFilter(size: Int, value: Int) :Array[Array[Int]] = {
       val middle = size / 2
       if (size % 2 == 1) {
         Array.fill(size, size)(value) 
       } else {
         Array.tabulate(size + 1, size + 1)((x, y) => 
         if (abs(middle - x) + abs(middle - y) 
         <= middle) value else 0)
       }
     } 
    

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      相关资源
      最近更新 更多