Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果。。。else语句不返回任何内容_Java_Debugging_If Statement_Irc - Fatal编程技术网

Java 如果。。。else语句不返回任何内容

Java 如果。。。else语句不返回任何内容,java,debugging,if-statement,irc,Java,Debugging,If Statement,Irc,我有一小段Java代码,它首先检查输入到IRC命令中的参数是否存在,然后再选择要运行的代码段。我正在通过PircBotX收听命令,下面描述的命令基本上要么列出服务器上的所有人员,要么通过命令:?列出(全部) 现在,这个语句的奇怪之处在于,当执行第一个调试语句时,控制台输出“Listing Selected…”,这是它输出的唯一内容。无论何时运行:,都不会执行其他调试语句?在IRC中列出。但是当我运行:?列出所有,一切似乎都正常运行,语句按照正常的方式执行 很可能,我只是在某个地方犯了一个很小的逻

我有一小段Java代码,它首先检查输入到IRC命令中的参数是否存在,然后再选择要运行的代码段。我正在通过PircBotX收听命令,下面描述的命令基本上要么列出服务器上的所有人员,要么通过命令
:?列出(全部)

现在,这个语句的奇怪之处在于,当执行第一个调试语句时,控制台输出“Listing Selected…”,这是它输出的唯一内容。无论何时运行
:,都不会执行其他调试语句?在IRC中列出
。但是当我运行
:?列出所有
,一切似乎都正常运行,语句按照正常的方式执行

很可能,我只是在某个地方犯了一个很小的逻辑错误,我发现这是不可能发现的。如果有人对如何解决这种情况有任何想法,我们将非常感谢您的帮助


谢谢。

如果您键入
:?列出
,这是两个参数。但是,如果您通过执行
参数[2]
来检查第三个,这将抛出索引越界异常。您没有看到错误消息的原因可能是您有一个
catch
块忽略了它,而没有打印错误。你需要找到这个
catch
,至少要把它放进去:

catch (Exception e) {
    e.printStackTrace();
}
以后,不要将捕捉块留空。总是记录一些东西,否则当错误发生时你将无法注意到

更换

if ( argments[2] != null && argments[2].equalsIgnoreCase( "all" ) ) {
    ...
}


这确保在您尝试访问数组之前,数组中有第三个元素。

我怀疑有错误抛出,您有一个
catch
块忽略它而不打印错误。你能证明事实并非如此吗?我猜日志不是“刷新”的。您是否尝试过登录到另一个框架,或者求助于System.out.println()?我同意tieTYT。我猜参数的长度是2,所以参数[2]抛出ArrayIndexOutOfBoundsException,您有一个catch(Exception){}捕获它并忽略它。永远不要捕捉异常。永远,永远不要忽视它们。如果你不能处理一个异常,就让它冒泡吧。使用调试器一步一步地执行代码可以证实这一点。@tieTYT好吧,要证明事实真相,需要进行一次非常大的编辑,这将覆盖整个代码页面。非常简单,它没有封装在try/catch块中的任何位置。它从onMessage()监听器进入这个
if
语句。也。。。
参数[1]!=null
如果我记得&&stuff是如何正确工作的(在检查第二个之前,它会先检查第一个,看看它是否正确),那么首先就可以停止这种情况。我不熟悉PircBotX,但我想它是一种调用onMessage()侦听器的框架?几乎可以肯定,它在对onMessage()侦听器的调用周围有一个try/catch块,因此,例如,如果侦听器抛出ArrayIndexOutOfBoundsException,它不会使整个系统突然停止。请记住,您的代码可以在调用堆栈的任何位置被try/catch块包围。这不应该是>=2或>1吗?如果只有两个要素,您的评估将失败。另外,稍微解释一下原因,有助于OP判断答案是否有价值,因为复制粘贴代码会导致比它解决的问题更多的问题;)我会说我使用了一些代码,但不是全部。您确实有一段冗余代码,如果参数的长度大于2,那么我们刚刚确认存在的第三个参数就不能为null。除此之外。。。我确实借用了
arguments.length>2
位,为我指出了正确的方向而竖起大拇指,而另一个答案给了我这一切背后的原因。@MadProgrammer:关于添加一些解释的要点。但是
=2
并不意味着您只需要确保元素位于0和1。它必须是
>2
@M477h3w1012:你错了。字符串数组可以包含空值<代码>字符串[]s=新字符串[3];System.out.println(s[0])@jbnize仅在您自己定义字符串数组大小的情况下使用。我同意字符串数组可以包含空值,但在本例中,我们不是通过输入IRC的命令来定义字符串的。谢谢您为我指明了正确的方向。不过,出于更直接的结果和原因,在语句周围放置另一个try/catch同样有价值,并使我能够修复代码(而不是寻找可能不存在的try/catch)@M477h3w1012这是一个有效的观点,短期内可能值得一试,这样你就可以找出症状的原因。但是要注意,你只是在一个严重的问题上贴了一个创可贴(你在某处有一个无声的障碍物)。你应该试着找到它并长期修复它,否则你会在将来遇到像这样的奇怪错误。
if ( argments[2] != null && argments[2].equalsIgnoreCase( "all" ) ) {
    ...
}
if (arguments.length > 2 && argments[2] != null && argments[2].equalsIgnoreCase( "all" ) ) {
    ...
}