gpt4 book ai didi

java - 打乱 ArrayList 直到满足条件 (Java)

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:43 25 4
gpt4 key购买 nike

首先,我的母语不是英语,所以请原谅我的一些错误。

我想对 ArrayList 进行洗牌(没问题),但是洗牌后列表必须满足某些条件。我的第一个方法是创建 if 语句,并在每次为 true 时进行洗牌。但条件太多,我不知道如何正确链接它们。

示例:我有一个包含这些整数的 ArrayList:

0, 1, 2, 3, 4, 5, 6

洗牌后的条件:

  • 偶数不能跟在偶数后面,除非是 6。
  • 6可以放在任何地方。
  • 此外,例如0 后面不能跟 1,所以下一个可能的数字是为 3、5 或 6。(
  • 同样适用于1. 1后面只能跟0、4或6。

ArrayList 中的每个元素只能列出一次,这就是为什么我认为改组是创建新列表的最简单方法。

难道我想错了?有更容易的方法吗?我对编程还很陌生......预先感谢您的任何答复或建议。

编辑:以下是所有条件:

  • 列表必须以偶数开头(最好不是 6,但这并不重要)
  • 偶数后面不能跟另一个偶数
  • 数字后面不能跟第二个最接近的数字(1 后面不能跟 2,只能跟 0、4 或 6)
  • 如前所述:6 可以放在任何地方
  • 打乱后的列表可能是这样的:0, 3, 6, 5, 2, 1, 4

嗯,我想就这些了。<​​/p>

如果我想创建多个 if 语句,我的主要问题是找出有效链接它们的正确方法(以便考虑每个 if 语句)。

最佳答案

洗牌方法并不好,原因有两个:

  1. 可能没有解决方案,因此您的程序将随机播放,直到所有时间结束。
  2. 随着元素数量的变化,这会变得相当耗时。

我建议另一种解决方案:

  • 我们得到一组数字(可以用列表表示)
  • 我们需要一个 boolean 函数canFollow,如果给定的数字可以扩展我们迄今为止的结果列表,该函数将返回 true。 (您给出的规则将允许使用两个数字的更简单的函数,但对于更复杂的条件,例如 5 后面可以跟有 8,仅当前面没有 6 时,更通用的函数才可以工作。)
  • 一旦有了这个,您就可以构建一个解决方案:从一个空列表开始。当给定的集合不为空时,从中取出一个元素,并检查它是否可以遵循结果。如果是这样,请重复直到给定的集合为空,在这种情况下您就有了解决方案。否则,请尝试下一个数字:

伪代码:

List<Int> brute(List<Int> result, List <Int> given) {
if (given is empty) return result;
foreach i in given
if i can follow result
r = brute(result + i, given - i)
if r != null return r
return null
}
solution = brute([], [1,2,3,4,5,6])

(请注意,result + i 是附加并给出 i 的结果的缩写 - i 给出时不带 i,但请确保在构建此代码时不会破坏原始结果并给出。)

如果您需要所有解决方案,可以通过将有效结果添加到某些开始为空的列表中来轻松更改。

关于java - 打乱 ArrayList 直到满足条件 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20949217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com