-1

私はクラス辞書を持っています。いくつかの単語を含むテキスト ファイルを (メイン メソッドから) 読み取り、それらをハッシュ セットに格納するだけです。このクラスには、ハッシュセットに特定の単語が含まれているかどうかをチェックし、ブール値を返すメソッド「contains」(static) もあります。ハッシュセット変数も静的として定義されています。

さて、別のプログラムがあり、静的メソッド「contains」を呼び出した場合、Dictionary クラスの「main」メソッドは実行されますか? 私のプログラムでは、Dictionary が空であるため実行されないようです (contains メソッドへの呼び出しはすべて false を返します)。main メソッドを確実に実行して辞書を埋めるにはどうすればよいですか?

もちろん、メソッドを非静的にして辞書オブジェクトを作成するか、呼び出しプログラムの内部クラスとして辞書を作成することができます。しかし、これを行うためのより良い方法があるかどうかを知りたいだけです。

必要に応じてコードを共有します。

PS: Dictionary クラスは独立して実行すると問題なく動作し、「contains」メソッドの呼び出しも問題なく動作します。

private static Set<String> dictionary = new HashSet<String>();

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
        System.out.println("Reading dictionary....");
        FileReader fr = new FileReader("dictionary.txt");
        BufferedReader br = new BufferedReader(fr);
        String s;
        while((s = br.readLine()) != null){
            dictionary.add(s);
        }
        br.close();
        fr.close();
    }catch(IOException ioe){
        ioe.printStackTrace();
    }
    System.out.println("Dictionary contains the following words");
    for(String s : dictionary){
        System.out.println(s);
    }
}
public static boolean contains(String inpword){
    //String[] args = new String[0];
    //main(args);
    if(dictionary.contains(inpword))
        return true;
    return false;
}
4

3 に答える 3

2

main メソッドは必ずしも必要ではありません。配列を使用して、辞書用のミニ データベースを作成することをお勧めします。そこにアイテムを入れて呼び出します。その方が簡単です。

また、静的でない void メソッドは静的メソッドでは機能しません。

于 2013-08-06T03:03:18.243 に答える
2

いいえ: クラスの静的メソッドを呼び出しても、そのメソッドは実行されませんmain()

于 2013-08-06T02:58:03.140 に答える
1

別のプログラムがあり、静的メソッド「contains」を呼び出した場合、Dictionary クラスの「main」メソッドは実行されますか?

いいえ、違います。

私のプログラムでは、Dictionary が空であるため実行されないようです (contains メソッドへの呼び出しはすべて false を返します)。main メソッドを確実に実行して辞書を埋めるにはどうすればよいですか?

Dictionary クラスmainメソッドを明示的に呼び出すことができます。例えば:

    public class OtherClass {
        ....
        public static void main(String[] args) {
            ...
            Dictionary.main(args);  // ... or provide a different argument list
            ...
        }
    }

しかし、Dictionary.main(現在書かれているように) は辞書の初期化以外にも多くのことを行うため、これは悪い考えです。おそらく、標準出力に辞書を書きたいと思うでしょう...

Dictionaryよりオブジェクト指向にする方がはるかに良い考えです:

  • 変数をdictionary非静的にする
  • メソッドをcontains非静的にする
  • 初期化コードをコンストラクターに移動する
  • メソッドにインスタンスDictionary.mainを作成させる...Dictionary

次に、インスタンスOtherMethodを作成して使用するようにクラスを作成できDictionaryます。


原則として、クラスには「メイン」メソッドは必要ありません。アプリケーションの真のエントリ ポイントであるクラスに対してのみ 1 つを指定する必要があります。

テスト用に「メイン」を含めるのは時代遅れです。テスト コードとハーネスを別々に実装することをお勧めします。たとえば、JUnit や TestNG などのテスト フレームワークを使用します。

于 2013-08-06T05:55:32.193 に答える