【问题标题】:Java While Loop Not ExecutingJava While 循环未执行
【发布时间】:2014-09-10 05:18:40
【问题描述】:

我正在尝试构建一个简单的程序,但我的程序的第一部分将无法正常工作。

有人可以检查我的代码并告诉我为什么 while 循环不会执行并生成正确的随机数吗?

提前谢谢你。

【问题讨论】:

  • ! 表示not!(randNumLower >= 97) 等同于 (andNumLower ess than 97 **and** more than 122。
  • 发布您的完整代码
  • 我故意用的!这样 while 循环就会看到 randNumLower 为 0,而 randNumLower 不在我的两个有效条件内,它会不断生成一个新数字,直到随机数满足我的条件。
  • 我会,除非选择以某种方式无法获得所需的价值。您必须发布更多涉及该问题的代码才能解决问题。
  • 我发布了整个代码。

标签: java random while-loop char


【解决方案1】:

如果我理解你的代码和问题,你想要类似的东西

int choice = 1;
int length = 8;
StringBuilder sb = new StringBuilder();

Random rand = new Random();
if(choice == 1) {
    //Lowercase Letters
    for(int i = 0; i < length; i++) {
        // from 'a' to ('z' - 'a')
        int randNumLower = 'a' + rand.nextInt('z'-'a');
        sb.append((char) randNumLower);
    }
}
System.out.println(sb.toString());

这里输出一串随机的小写字母。

【讨论】:

  • +1,我的第一个未经编辑的答案使用了数字,虽然我在看到你的之前修复了它,但你先用正确的方法做了。不过,关于原始逻辑的解释会很好:)
  • @DaveNewton 我看到了随机检查的范围,并认为让我们在正确的范围内生成一个值。我知道原来的逻辑是不正确的。 :)
  • 是的 - 最好使用可用的工具,而不是通过迭代和逻辑重复可以一次性完成的事情:好电话。
【解决方案2】:

你可能是这个意思:

while ((num < 97) || (num > 122)) {
    num = randNumList.nextInt(122)+1;
}

长度为 5 的三个输出:

ordfg
idlxw
ugznu

您的条件应该是||(或)而不是&amp;&amp;(和)。 randNumLower 不能同时低于 97 高于 122,它必须是其中之一(或介于两者之间)。

要使用令人困惑的否定,您需要:

(!(num >= 97) || !(num <= 122))

就我而言,这更难阅读。

更好的是,跳过所有这些,只使用正确的范围:

num = randNumList.nextInt('z' - 'a') + 'a';

请注意,使用显式 StringBuilder 的优化并不是绝对必要的,因为它会在幕后使用。

【讨论】:

  • 谢谢你的逻辑解释!否定完全让我走错了路,我想不通!