下面的print语句将打印“helloworld”。有人能解释一下吗?
System.out.println(randomString(-229985452) + " " + randomString(-147909649));
而randomString()
如下所示:
public static String randomString(int i)
{
Random ran = new Random(i);
StringBuilder sb = new StringBuilder();
while (true)
{
int k = ran.nextInt(27);
if (k == 0)
break;
sb.append((char)('`' + k));
}
return sb.toString();
}
其他答案解释了原因,但下面是如何解释的。
给定一个Random
的实例:
Random r = new Random(-229985452)
r.nextInt(27)
生成的前6个数字是:
8
5
12
12
15
0
和前6个数字,r.nextInt(27)
生成给定的Random r=new Random(-147909649)
是:
23
15
18
12
4
0
然后只需将这些数字添加到字符'
(即96)的整数表示中:
8 + 96 = 104 --> h
5 + 96 = 101 --> e
12 + 96 = 108 --> l
12 + 96 = 108 --> l
15 + 96 = 111 --> o
23 + 96 = 119 --> w
15 + 96 = 111 --> o
18 + 96 = 114 --> r
12 + 96 = 108 --> l
4 + 96 = 100 --> d
问题内容: 以下打印语句将打印“ hello world”。有人可以解释吗? 而且是这样的: 问题答案: 当使用特定的种子参数(在这种情况下为或)构造的实例时,它遵循以该种子值 开头 的随机数生成算法。 每个使用相同种子构造的对象每次都会生成相同的数字模式。
我发现了以下代码。我知道,它看起来没有使用看似随机的数字那么奇怪/令人兴奋,但它似乎比使用大数字上的位移位更复杂: 创意上的代码 输出: 你好,世界 它是如何工作的?它是某种形式的加密还是有人对它的构建感到愤怒?
问题内容: 我所知道的打印,我们可以使用,并且我们可以使用 ,但我们仍然可以使用打印它们。那么,如果我总是习惯于打印它们怎么办?如果我这样做会发生什么问题? 问题答案: 不会有什么不好的,但是动词指示软件包打印为数字(以10为底),动词表示使用可以覆盖的 默认 格式。 请参阅以下示例: 输出(在Go Playground上尝试): 使用动词时,程序包将检查该值是否实现接口(这是一个方法),如果是,
下面是我在网上找到的一些代码: 此代码将打印到屏幕上;你可以看到它在这里运行。我可以清楚地看到写的,但它是反向的。这段代码是如何工作的?这是如何编译的呢? 编辑:我在IntellIJ中尝试了这段代码,它工作得很好。但是,由于某些原因,它在notepad++和cmd中不起作用。我还没有找到解决方法,所以如果有人找到了,请在下面评论。
问题内容: 我有以下课程: 这是编译结果; 为什么我的输出中包含数字? 问题答案: 在第二种情况下,它将两个字符(G-71和o-111)的unicode码相加并打印总和。这是因为被视为数字类型,因此在这种情况下,运算符是通常的求和。
我发现了下面的代码。我知道,它看起来没有这个使用看似随机数的方法那么怪异/刺激,但它似乎比这个使用大量数字的位移的方法更复杂: Ideone上的代码 输出: 它是如何工作的?它是某种形式的加密,还是有人在构造它时发疯了?