【问题标题】:Error when implementing a while loop实现while循环时出错
【发布时间】:2015-05-06 15:06:10
【问题描述】:

我正在尝试编写一种通过对话框多次请求用户输入的方法,该方法仅在输入空字符串时才停止请求。

每个条目都需要添加到一个列表中,我称之为aList。我正在为我的程序中的对话框使用定制导入,您可能不熟悉称为Dialog.request("");

我不一定要使用它,但我确实需要一个弹出对话框,它仅在输入空字符串或按下取消时关闭。希望能帮到你

public void addToList()

{
    String inputName = Dialog.request("Please Enter A Name");
    aList.add(inputName);
}

使用while循环如下

public void addToList()
{   String inputName = Dialog.request("Please Enter A Name");
    while(inputName !=""){
    aList.add(inputName);
}
}

我尝试实现一个while循环,但导致以下错误

java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError at unknown line

感谢任何提示。到目前为止,使用x.addToList(); 调用该方法一次只添加一个条目。当我放入 while 循环或 do-while 循环时,我得到了错误

【问题讨论】:

  • 从错误中,您似乎很可能创建了一个无限循环。确保循环终止。此外,您应该始终确保在您的问题中包含所有相关代码,在这种情况下是产生错误的循环
  • 我会试一试,谢谢。我应该使用 while 循环还是 do-while 循环?
  • 如果你知道(并且可以保证)总会有至少一个操作,do-while 是合适的
  • @JackB 请发布完整的while循环代码...
  • 我已经在我的编辑中添加了它。

标签: java while-loop do-while


【解决方案1】:

这里有几个问题。首先在比较Strings/对象时,您应该使用.equals.equalsIgnoreCase 而不是!===。下一个问题是您不会在循环内重新提示用户输入。你可能想要这样的东西:

public void addToList()
{
    String inputName = Dialog.request("Please Enter A Name");
    while(!inputName.equalsIgnoreCase(""))
    {
        aList.add(inputName);
        inputName = Dialog.request("Please Enter A Name");
    }
}

如果用户输入了一个名字,你应该不断要求他们输入另一个名字,直到他们不输入一个名字。

【讨论】:

    【解决方案2】:

    你的问题在这里:

    while(inputName !=""){
        aList.add(inputName);
    }
    

    这有两个问题。首先,您不能将字符串与!=== 进行比较,因为这将改为比较引用。改为用户String.equals()

    其次,您正在检查一个不会改变的变量。这很关键,因为这意味着循环中的条件将 alwaysnever 为真。您必须在循环中的某个点更改条件,否则它将永远不会终止。

    执行此操作的最简单方法是在循环中简单地请求用户输入,如下所示:

    String inputName = "nothing";
    while(!inputName.equals("")){
        inputName = Dialog.request("Please Enter A Name");
        aList.add(inputName);
    }
    

    【讨论】:

      【解决方案3】:

      作为一个平等的 - 但在我看来更优雅 - 替代以前的答案,循环可以用 do-while 语句表示:

      String inputName;
      do {
          inputName = Dialog.request("Please Enter A Name");
          if (!inputName.equals("")) {
              aList.add(inputName);
          }
      } while (!inputName.equals(""));
      

      【讨论】:

      • 我会检查它是否也适用于将来的参考,感谢您的输入
      • 是的,效果也很好,如果我不是一个卑微的菜鸟,我会支持你
      • 我刚刚对你的问题投了赞成票。你的菜鸟应该减少一点:-)
      猜你喜欢
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多