0

答えた

マイクは私がいくつかのコードを追加することを提案しました

default:
break;

スイッチの一部。例外を追加しましたが、他に変更する必要はありません。これで、コードは正常に実行されます。みんなありがとう!


読みやすさのために編集:

エラー:「説明リソースパスの場所の種類ローカル変数メッセージが初期化されていない可能性がありますTweetFragment.java /offline Twitter / src / com / deadpixels / offset / twitter line78Javaの問題」

行の場合:

int handleStartsAt = messages[i].indexOf('@');

また、同じエラーが80行目で2回発生します。つまり、次のようになります。

ph = messages[i].substring(handleStartsAt, messages[i].length());

あなたの質問に関しては、

default:
break;

int tweetタイプは0、1、または2のいずれかである必要があるため、行が追加されました。関数は制御された環境内で呼び出され、そのようにして呼び出しが例外を返さないことを確認します。

編集の終わり。

文字列配列を返すメソッドを作成しようとしています。この文字列配列のサイズは、パラメータとしてメソッドに渡されるメッセージタイプに応じて変化します。どうやら変数を初期化していないので、これを行うのにいくつかの問題があります。しかし、私はそうだと思います。

私が問題を抱えている変数は「メッセージ」配列です。

私は次のことを宣言できないことに注意してください。

String [] messages = new String [arrayLength];

呼び出しのこの時点で、配列の長さはわかりません。そして、私はこれを行うことはできません:

String [] messages = null;

この後、コンパイル時にアラートが表示されないにもかかわらず、ランタイムエラーが発生します。

また、明確にするために、私はそれを持っているでしょう:

messages = OfflineTwitter.mentions;

上記の行は変数を初期化しています。「OfflineTwitter.mentions」は配列であり、別のクラスにのみ格納されます。

これがコードスニペットです。

public String[] getHandles (int tweetType) {

    int arrayLength = 0;
    String [] handles;
    String [] messages;

    switch (tweetType) {
    case 0:
        arrayLength = OfflineTwitter.mentions.length;
        messages = OfflineTwitter.mentions;
        break;
    case 1:
        arrayLength = OfflineTwitter.directMessages.length;
        messages = OfflineTwitter.directMessages;
        break;
    case 2:
        arrayLength = OfflineTwitter.allTweets.length;
        messages = OfflineTwitter.allTweets;
    default:
        break;
    }

    handles = new String [arrayLength];

    for (int i = 0; i < arrayLength; i++) {
        int handleStartsAt = messages[i].indexOf('@');
        String ph = "";
        ph = messages[i].substring(handleStartsAt, messages[i].length());
        int handleEndsAt = ph.indexOf(":");
        String sender = ph.substring(0, handleEndsAt);
        handles[i] = sender;
    }

    return handles;
}
4

2 に答える 2

3

もしそうtweetType < 0 || tweetType > 2なら

default:
    break;

に値を割り当てないに到達しましたmessages

defaultブランチまたはthrow例外に値を割り当てるか、return最初の使用時に配列が初期化されるようにする必要があります。

おそらくそれをに変更します

default:
    throw new IllegalArgumentException("Invalid tweet type : " + tweetType);

または、理想的には、すべてのケースを網羅的にカバーできるように変更tweetTypeします。enum

enum TweetType {
  MENTIONS,
  DIRECT_MESSAGES,
  ALL_MESSAGES,
  ;
}

に変更int tweetTypeTweetType tweetTypeます。

于 2012-08-27T19:34:39.223 に答える
-1

forループのロジックに問題があります。配列をに設定するnullと、コンパイルエラーを回避できます。さらにヘルプが必要な場合は、結果のエラースタックトレースを投稿してください。

于 2012-08-27T19:36:27.627 に答える