【问题标题】:How to shuffle rows in an array?如何打乱数组中的行?
【发布时间】:2017-10-24 11:31:21
【问题描述】:

我正在尝试在处理中对当前数组中的行进行洗牌。该数组包含 24 行,是一个二维数组。谁能告诉我我做错了什么?

float[][] shuffleArray(float[][] myArray) {   
  float[][] newArray = myArray;   
  int random1 = round(random(0, 24));
  int random2 = round(random(0, 24));
  float[] buffer1 = newArray[random1];
  float[] buffer2 = newArray[random2];
  newArray[random2] = buffer1;
  newArray[random1] = buffer2;   
  return newArray; 
}

【问题讨论】:

  • 您介意告诉我们您的编程语言吗?
  • java 正在处理中
  • @Dave “处理中的java”这个短语有些含糊。处理 本身就是一种编程语言(尽管它基于 Java 并在 JVM 上运行),但它不是 Java。我认为您的问题是关于处理而不是 Java,在这种情况下,您提到 Java 只会使问题变得混乱。
  • 也不清楚您要做什么。您是要返回一个新数组还是要修改传递的数组?您对return 的使用暗示了前者,但您似乎在使用将修改传递的数组作为副作用的代码。另外,您说24 元素而且还说“多维”。一个数字并不能充分确定它。 24 = 12 x 2? 4×6?请澄清。
  • 我正在尝试将过去数组的顺序修改为新数组。当前数组是 myArray[24][3]。

标签: arrays multidimensional-array processing shuffle


【解决方案1】:

要解决您的问题,您首先必须debug your program 弄清楚您的程序究竟做了什么。

最好的办法是逐行检查您的代码以了解发生了什么。

float[][] shuffleArray(float[][] myArray) {   
  float[][] newArray = myArray;   
  int random1 = round(random(0, 24));
  int random2 = round(random(0, 24));
  float[] buffer1 = newArray[random1];
  float[] buffer2 = newArray[random2];
  newArray[random2] = buffer1;
  newArray[random1] = buffer2;   
  return newArray; 
}
  • 首先,将newArray 变量指向myArray 变量。请注意,这意味着两个变量都指向同一个数组,因此对一个变量的更改会影响另一个。

  • 然后创建两个随机数,但请注意,这些随机数可能相同。

  • 然后您会在这些索引处获得子数组,这可能又是相同的。然后你交换子数组。

  • 然后您返回newArray,但请记住,它指向的是与myArray 相同的数组。所以你只是在修改输入数组,然后返回一个对它的引用。

所以,这个函数的作用是也许交换二维数组中的两个子数组。这与洗牌整个数组不同。拍照一副牌,也许交换两张牌。这和洗牌不一样。

要了解参考资料,我建议您阅读this,然后阅读this

现在,为了解决您的问题,Google 是您的朋友。搜索“java shuffle array”将返回大量结果,包括thisthis。如果您将来遇到问题,请尝试完成这个调试程序的过程,以便在您提出问题之前准确了解您的代码在做什么。祝你好运。

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 2014-07-24
    • 2014-04-14
    • 2017-09-24
    • 1970-01-01
    相关资源
    最近更新 更多