2

match完全なnoobの質問についてお詫びしますが、次の方法でfor-eachループが終了した後の値に何が起こっているのかを誰かが説明できますか?

コンパイルしようとすると、次の警告が表示されますvariable match might not have been initialised

public void listMatching(String searchString) {
boolean match;

for(String filename : files) {
    if(filename.contains(searchString)) {
        System.out.println(filename);
        match = true;
    }
    else {
        match = false;
    }
}

if(match == false) {
    System.out.println("No matches found for " + searchString);
}
}
4

5 に答える 5

3

これがあなたが望むことをする修正です:

public void listMatching(String searchString) {
    boolean match = false; // initialize local variable
    for(String filename : files) {
        if(filename.contains(searchString)) {
            System.out.println(filename);
            match = true;
        }
    }
    if(!match) { // same as 'match == false', just without comparison
        System.out.println("No matches found for " + searchString);
    }
}

ローカル変数を初期化する必要があります。フィールドのみがそのタイプのデフォルト値を取得します。

ブロック内で再割り当てmatchすると、最後の1つを除いてすべてが含まれている場合でも、ループの後になります。falseelsefalsefilenamesearchString

于 2013-01-28T07:19:07.143 に答える
3

まず、定義する必要がありますboolean match = false;

また、一致を見つけたらループから抜ける必要があります。そうしないと、matchステータスが上書きされます。

 if(filename.contains(searchString)) {
        System.out.println(filename);
        match = true;
        break;
    } // this wil help whether a match is found or not

一致する数を見つけることに興味がある場合intcounter= 0; if(filename.contains(searchString)){System.out.println(filename); 一致=true; カウンター++; }//これは一致する数を見つけるのに役立ちます

ついにSystem.out.println("number of matches for"+searchString+" : "+counter);

于 2013-01-28T07:12:47.720 に答える
0

プログラムでの警告を回避するには、変数をfalseに初期化します。

また、matchは単一の変数であり、さまざまなファイルの内容に応じて(同じ文字列を検索)、同じ変数にtrueまたはfalseを割り当てます。

の最終的なブール値はmatch、ファイルリストの最後のファイルで文字列を検索した結果です。

于 2013-01-28T07:18:55.243 に答える
0

ファイル配列が空である可能性があるため、一致変数のデフォルト値を設定する必要があります。

boolean match=false;

for(String filename : files) {
    if(filename.contains(searchString)) {
        System.out.println(filename);
        match = true;
        break;
    }
}

すべてのファイルにこの検索文字列が含まれていることを確認する必要がある場合、Uは次のコードを使用できます。

boolean match=files.lenght!=0;

for(String filename : files) {
    if(!filename.contains(searchString)) {
        System.out.println(filename);
        match = false;
        break;
    }
}
于 2013-01-28T07:22:29.293 に答える
0
  1. 一致するものが見つかったら、ループを中断する必要があります。

  2. 見つかった変数を初期化する必要があります。また、ループを実行することもできません。その後、if 条件が初期化されていない変数を参照する可能性があります。これは、コンパイラが伝えたいことです。

于 2013-01-28T07:15:05.767 に答える