【问题标题】:Java - When I type nothing in input I get red errorsJava - 当我在输入中不输入任何内容时,我会收到红色错误
【发布时间】:2012-10-13 21:49:15
【问题描述】:

我的程序完全按照我希望的方式运行,但是当我将问题留空或单击“确定”时,我的输出中所有这些错误都显示为红色。我想知道如何解决这个问题,所以当我什么都不输入时,我应该得到 null 或空字符串。我相信我已经搞砸了以下程序,但我需要这些数据才能使我的程序正常工作。我是否缺少一些东西来确保我可以获得 null 或空字符串。

谢谢!

input = JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):");
i = input.length() - 1;
lastletter = input.charAt(i);

【问题讨论】:

  • 这些错误是Exceptions 抛出的。请复制并粘贴到这里,这样我们就可以看到它是哪个异常以及堆栈跟踪是什么。
  • 所有这些红色错误都会生成,以便您可以通过阅读错误消息来诊断错误。阅读。小心点。
  • 详情参考这里@user1743969:docs.oracle.com/javase/1.4.2/docs/api/java/lang/…
  • 感谢您的帮助! :D 我解决了,当我在循环中时仍然有问题,它不起作用,但希望它能起作用。

标签: java tags


【解决方案1】:

当没有输入时,input.length() 返回0。然后你取0-1 并得到i 包含-1。然后,您尝试在空输入中获取索引 -1 上的字符。在检索最后一个字母之前,您必须检查 input.length() 是否等于 0。

【讨论】:

    【解决方案2】:

    当您不输入任何内容时,input 将变为 ""。因此,input.length() - 1 的计算结果为 -1,这意味着您正在调用 input.charAt(-1)。这会导致StringIndexOutOfBoundsException 被抛出,从而产生“红色错误”。

    【讨论】:

      【解决方案3】:

      线

      JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):");
      

      如果用户在没有输入任何文本的情况下单击确定,将返回一个空字符串 ("")。此字符串的长度为零,尝试访问索引 -1 处的字符将引发 indexOutOfBoundsException。这可以通过检查输入的长度轻松解决。但在你这样做之前,你需要检查输入是否等于 null,因为如果用户按下取消或右上角的“x”,这将返回。所以你需要的检查是:

      if (input != null && input.length()  > 0){
         lastletter = input.charAt(input.length - 1);
      }
      

      【讨论】:

        【解决方案4】:

        String 的chatAt(index) 返回指定索引处的任何字符,其中索引的范围可以是 0 到字符串的长度减 1 即。 string.lenght()-1 并且必须是积极的。 超出此范围的任何索引都会给您 `IndexOutOfBoundsException 。

        所以在你的特殊情况下,

        i = input.length() - 1;
        lastletter = input.charAt(i);
        

        当您什么都不输入时, input.length() 返回 0 ,因此 i 变为 -1。 由于 java 规范说 charAt() 的有效范围是从 0 到 input.length()-1,其中 input.length()-1 必须为正,因此您的代码会抛出 IndexOutOfBoundsException

        你可以通过检查索引'i'是否为负ex来避免它:

        i = input.length() - 1;
        if (!i<0){
           lastletter = input.charAt(i);
        }
        

        请参阅http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#charAt(int) 了解更多详情。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-05
          • 2017-01-30
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 2021-10-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多