Java 如何生成0';s和1';在一行代码中有8位长?

Java 如何生成0';s和1';在一行代码中有8位长?,java,Java,我只想在一行代码中完成它 如果您不想包含以0开头的二进制数,如“00001010”,并且您只想表示以1开头的二进制数,那么您可以在128和255之间“播放”,因为10000000=128是十进制的,11111111=255在这种情况下,您需要执行以下操作: public class Main { public static void main(String[] args) { // generate a random String of 0's a

我只想在一行代码中完成它


如果您不想包含以0开头的二进制数,如“00001010”,并且您只想表示以1开头的二进制数,那么您可以在128和255之间“播放”,因为10000000=128是十进制的,11111111=255在这种情况下,您需要执行以下操作:

public class Main {
        public static void main(String[] args) {
                // generate a random String of 0's and 1's that is 8 digits long
                System.out.println("Print the string of 0's and 1's");
        }
    }
Math.random()为您提供一个介于0.0和1.0之间的数字,因此127*Math.random将为您提供一个介于[0127]之间的随机值,因为我们希望二进制数以“1”开头,因此请确保该数字必须大于128=10000000

如果您想包括0到255之间的所有数字,您可以这样做:

System.out.println(Integer.toBinaryString(128 + (int) (127 * Math.random())));

您希望使用Integer类的toBinaryString方法。然后通过应用&0xff,将一个新的随机信息传递给它,使其短至一个字节(8位)

System.out.println(String.format("%8s", Integer.toBinaryString((int) (255 * Math.random()))).replace(' ', '0'));

您还可以使用
IntStream
来执行此操作。这不是一个很好的解决方案,因为它实例化了几个
随机的
对象,但它只有一行代码:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        System.out.println(Integer.toBinaryString(new Random().nextInt() & (0xff)));
    }
}

这是一行,尽管它肯定不是最可读的方式。大多数事情都可以在一行中完成,但不容易调试或一眼就能理解。这也不是最快的方法,但你说你不在乎效率

IntStream.rangeClosed(1, 8).forEach(x->System.out.print(new Random().nextInt(2)));
工作原理:

String random8Bits = new Random().ints(8, 0, 2).mapToObj(Integer::toString).collect(Collectors.joining());

有关更多信息,请参阅和。

我们可以随机选择一个表示中有8位的数字并打印它:

new Random()
// creates a random number generator
.ints(8, 0, 2)
// returns an IntStream containing 8 random numbers between 0 (inclusive) and 2 (exclusive).
.mapToObj(Integer::toString)
// converts each int in the stream to its string representation
.collect(Collectors.joining())
// joins the strings
我们希望该数字大于127,因为否则我们将没有8位(出于同样的原因,我们希望它小于256)。

这只是另一种解决方案:

    int n = ThreadLocalRandom.current().nextInt(128, 256);
    System.out.println(Integer.toBinaryString(n));
String.format("%8s", Integer.toBinaryString(new Random().nextInt() & 0xFF)).replace(' ', '0')
没有流,单个
随机
,但有
字符串
操作…

这里有另一个“解决方案”:

。。。只是有点偏颇。行包装的可读性

另外,请注意,根据字面解释:

System.out.println((Integer.toBinaryString(
    new Random().nextInt()) + "00000000").substring(0, 8));
是一行代码。它甚至是一条Java语句:-)


更新:这是另一个没有偏见的版本:

{ int tmp = new Random().nextInt(); /* add more statements here */ }
强制符号位为1意味着我们不必担心前导零是否存在。

您可以使用并指定所需的字符

System.out.println(Integer.toBinaryString(
    new Random().nextInt() | 0x80000000).substring(24));

但是为什么呢?为什么只有一行代码?因为我的项目面临的挑战是尽可能少地编写代码。创建一个方法为我实现这一点很容易,但我只想在一行代码中实现这一点。和效率无关。那么到目前为止您尝试了什么呢?
System.out.println(Stream.generate(()->Integer.toString((int)(Math.random()*2))).limit(8).collect(Collectors.joining())
@ElliottFrisch或
new Random().int(8,0,2)
我认为前导零计数也确实是一个赋值。这很完美,但是为什么要用128和127呢?这会生成一个长度超过8位的字符串吗?我之所以要问这个问题,是因为它的长度必须是8位数,不能小于也不能大于。对于0到255,您也可以使用第一种情况中使用的方式,即
Integer.tobinarysting(256+(int)(Math.random()*255))。substring(1,8)@MohammadMahjoub您需要将128和127更改为二进制数,您就会知道答案。@Alex这不是真的
256+(int)(Math.random()*255)
将提供超过8位数字。如果必须是8且只有8,则需要保持在0和255之间。“0xff”是什么意思?
System.out.println(RandomStringUtils.random(8, '0', '1'));