gpt4 book ai didi

与使用 int 相比,Java for 循环条件在使用 length() 时表现不同

转载 作者:行者123 更新时间:2023-12-04 23:48:51 24 4
gpt4 key购买 nike

我最近开始学习 Java,但遇到了 for 循环的问题。这是一个代码片段:

for (int c = 0; c < inputString.nextLine().length(); c++) {
Random randomIndex = new Random();
currentString.append(alphabet[randomIndex.nextInt(26)]);
}

System.out.println(currentString.toString());

在上面的代码中,我尝试创建一个与用户输入的字符串长度相同的随机字符串。但是,循环只运行一次。例如,如果我输入一个长度为 4 的字符串,我将得到一个单字符的字符串。

如果我像这样硬编码循环条件

for (int c = 0; c < 4; c++) { // We should have a 4-character string.
Random randomIndex = new Random();
currentString.append(alphabet[randomIndex.nextInt(26)]);
}

System.out.println(currentString.toString());

我得到了我所期望的,一个 4 个字符的长字符串。

我缺少关于 length() 方法的一些属性吗?即使运行 System.out.println(inputString.nextLine().length()) 也会给我输入字符串的预期长度。怎么回事?

最佳答案

我想扩展已接受的(正确的)答案。

基本的for语句:

for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement 

在 JLS 中被描述为:

14.14.1. The basic for Statement

The basic for statement executes some initialization code, then executes an Expression, a Statement, and some update code repeatedly until the value of the Expression is false.

Expression , Statement并多次执行更新代码,直到Expression的值是false .

在你的情况下 Expression

c < inputString.nextLine().length()

并且(假设 inputString 是一个 Scanner ),每次计算该表达式时,它都会读取一个新的输入行,并将其长度与 c 的当前值进行比较.

这意味着如果您首先输入一个 4 个字符 String然后按回车,条件将是true , 自 c == 00 < 4 .

但是,下一次计算表达式时,需要一个新的输入行。如果你只是按下回车键(我假设你按下了,给定你得到的输出),新的输入 String将是一个空的 String , 所以条件是 1 < 0 ,即 false , 循环将结束输出单个字符 String .

请注意,如果您没有按回车键,而是输入了另外 3 个 String s 至少有 4 个字符,循环将继续并产生一个 4 个字符随机 String如果您输入了一个空的 String (或者实际上,在第 4 次迭代之后长度 <= 4 的任何 String)。

例如以下5行输入:

1234
1234
1234
1234
1234

产生长度为 4 的输出字符串

fwpl

当然,正确的解决方案是只读取一个输入行,并使用它的长度来确定循环的迭代次数:

Random randomIndex = new Random();
int length = inputString.nextLine().length();
for (int c = 0; c < length; c++) {
currentString.append(alphabet[randomIndex.nextInt(26)]);
}

请注意,我移动了 Random 的实例化循环外的实例,因为没有理由为循环的每次迭代创建一个新实例。

System.out.println(currentString.toString());

关于与使用 int 相比,Java for 循环条件在使用 length() 时表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59463115/

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