1

実行するコード セグメントを選択する前に、IRC コマンドに入力したパラメーターが存在するかどうかを最初にチェックする小さな Java コードがあります。私は PircBotX を介してコマンドを聞いています。以下に説明するコマンドは、基本的にサーバー上のすべての人、またはコマンドを介してチャネル内のすべての人をリストするコマンド:? list (all)です。

if ( argments[1].equalsIgnoreCase( "list" ) ) {
  CyniChat.printDebug( "Listing chosen..." );
  if ( argments[2] != null && argments[2].equalsIgnoreCase( "all" ) ) {
    CyniChat.printDebug( "You've either got 'all' as parameter..." );
    CyniChat.printDebug( event.getUser().getNick()+" : "+thisChan.getName() );
    ircResponses.listOutput( event.getUser(), event.getBot(), thisChan.getName(), true );
    return;
  } else {
    CyniChat.printDebug( "Or you don't...." );
    CyniChat.printDebug( event.getUser().getNick()+" : "+thisChan.getName() );
    ircResponses.listOutput( event.getUser(), event.getBot(), thisChan.getName(), false );
    return; 
  }
}

ここで、このステートメントの奇妙な点は、最初のデバッグ ステートメントが実行されている間、コンソールが "Listing selected..." を出力している間、出力されるのはそれだけです。:? listIRC で実行するたびに実行される他のデバッグ ステートメントはありません。しかし、私が実行する:? list allと、すべてが正常に実行されているように見え、ステートメントは通常どおりに実行されます。

おそらく、どこかで非常に小さな論理エラーを犯しただけで、それを見つけるのは不可能だと思います。この状況を解決する方法について誰かがアイデアを持っている場合は、助けていただければ幸いです。

ありがとう。

4

2 に答える 2

1

交換

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

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

これにより、アクセスを試行する前に、配列に 3 番目の要素が存在することが保証されます。

于 2013-10-04T21:29:39.533 に答える