当前位置: 首页 > 知识库问答 >
问题:

我如何创建一个方法来生成所有可能的布尔函数?

柳昊焱
2023-03-14

我已经使用Java创建了一个由30个节点组成的链表。每个节点在实例化时被分配一个随机布尔值。

我希望为每个节点分配它自己的随机布尔方法/函数/规则,它接受三个布尔参数并返回结果:

boolean assignedBolMethod(boolean a, boolean b, boolean c) {
     boolean answer  = conduct assigned ruled
     return answer;
}

我知道有256条这样的规则可供选择(2^2^3);我如何生成所有256个可能的规则而不手动键入它们?

共有1个答案

牟波
2023-03-14

当我们表示false的时候,我们说“0”,当我们表示true的时候,我们说“1”,因为这让我们读起来更容易:

有8个不同的可能输入(000、001、010、011、100、101、110和111),对于每个输入,有2个可能的答案:0或1。

让我们如下定义一个“规则”:我们总是按照精确的顺序列出所有输入,然后我们以1或0的形式列出规则对每个输入的答案。因此,00001111是一个规则,它表示'000=0','001=0,010=0,011=0,100=1,‘等等--换句话说,规则是:返回A;,如果您要将它放入代码中。

很明显,确实有256条规则(2^8),您可以将每个规则表示为单个字节,因为字节由8位组成。每个现有字节代表一个规则。因此,“一个规则”和“一个字节”是完全可以互换的,因此,这归结为:我如何生成一个任意字节。

这很简单:

Random r = new Random(); // do this once someplace

byte rule = r.nextByte();

或者,如果您想要每个可能的规则的有序列表:

byte[] rules = new byte[256];
for (int i = 0; i < rules.length; i++) rules[i] = (byte) i;

但这个阵多半是没有意义的;它有效地将“100”映射到“100”--不是很有用。实际上并不需要拥有所有可能规则的“列表”:Java已经附带了它:byte-这是一种完全匹配的数据类型。因此,如果您有一些代码,并且希望应用“规则100”,那么您只需要编写byte rule=100;-不需要列表。

给定一个表示规则的字节,加上这3个输入,如何确定规则指示的答案是正确的?

首先,你需要折叠你所拥有的3个布尔值,在你的字节中的8位中的一位代表答案。

int bitPos = (a ? 1 : 0) + (b ? 2 : 0) + (c ? 4 : 0);

这给出了确定答案的位(介于0和7之间的数字)的位置。

然后,给定一个位位置和一个字节:

boolean answer = ((rule >> bitpos) & 1) != 0;

分解一下:

>

  • a>>b将获取a的位串(假设它是rule00110111),并将其右移b点。因此,如果我们想要比特位=2的位(因此,第三位),0b00110111>>2就是0b00001101。这意味着我们感兴趣的部分现在已经结束了。

    a&b将获取a的位串和b的位串,并检查a和b都具有1的所有位置。然后,它返回一个新的数字,将每个位设置为1,其中a和b都有一个1。因此,A&1具有将所有位清零的作用,但最低位除外(1=00000001-除最低位以外的所有位未置位)。它除去了所有的部分,除了我们关心的部分。

    !=0然后只检查该位是否设置。

  •  类似资料:
    • 问题内容: 目前,我试图让所有可能的组合从的,是每一个元素只包含一个字母。 在本身包含相同字母两次甚至更多,他们只应该,因为他们经常会出现使用。 在稍后应该含有最多的给定的长度从最小的2个字母的所有组合。 我在此处搜索了stackoverflow,但只发现了忽略以下事实的置换函数:每个字母仅在出现时才经常使用。 这是我的第一个Swift 2项目,所以请原谅我的绿色态度:) 我想要的是 我目前的做法

    • 问题内容: 在Java中,可以轻松地生成无限流。但是,我需要生成一个最终将完成的流。 想象一下,例如,我想要目录中所有文件的流。文件的数量可能很大,因此我无法预先收集所有数据并通过它们(通过)创建流。我需要逐段生成序列。但是流显然会在某个时刻结束,并且像(或)这样的终端运营商需要对其进行处理,因此不适合在这里使用。 是否有任何合理的简便方法可以用Java实现,而无需自己实现整个Stream接口?

    • 问题内容: 我有一个项目{a,b,c,d}的列表,当我需要生成所有可能的组合时, 您可以选择任意数量的项目 顺序不重要(ab = ba) 空集不被考虑 如果我们抓住可能性,那就应该是 我使用了以下递归方法: 当数组大时,有没有更有效的方法? 问题答案: 将组合视为一个二进制序列,如果所有4个都存在,则得到1111,如果缺少第一个字母,则得到0111,依此类推。对于n个字母,我们将得到2 ^ n -

    • 问题内容: 似乎比它要简单得多,但是如何用python生成所有16,777,255个rgb颜色呢? 问题答案: 颜色通常用十六进制数表示,实际上只是整数。因此,从0到16,777,215(0xFFFFFF)的简单循环就足以生成所有24位RGB颜色。 在python 2.x中,您可以执行以下操作:

    • 公共类请求参数{ } 当我在URL为“param2=ffffhhh”的情况下测试上述方法时

    • 如何创建布尔流。FALSE,比如说,长度为100? 我一直在挣扎的是: 最初我打算创建一个。但是返回一个数组。所以合理地,我考虑使用流API作为一个方便的和几乎(1)操作工具; 没有no-params构造函数(2),因此我不能使用,因为它接受