1

この問題の答えを探してみましたが、何を探すべきか完全にはわかりません。基本的に私が欲しいのは、私のプログラムのユーザーが(コマンドラインに)入力できるようにすることです。

java galaxySim HELP

そして私のプログラムがファイル形式やものについていくつかのことを彼らに伝えるために。それ以外の場合、最初の引数はファイル名です。したがって、これを実行する必要があるコードは次のとおりです。

if (args[0] == "HELP") {
  System.out.printf("Help Stuff...");
}else{
  filename = args[0];
  System.out.printf("Filename found");
}

これは、これに影響を与えるとは思わないエラー処理にカプセル化されているため、記述していません。問題はこれです:私が最初の引数として入力するものは何でも、それは常にelseステートメントに行きます。

引数の前後にスペースを追加してみましたが、役に立ちません。私が書いているかのように、それが私のIFステートメントの問題であるとは思わない

if(args[0] == args[0]){

その後、正しいステートメントに移動します。まるで

args[0] == "Help"

常にfalseです。おそらく何らかのエンコーディングの問題がありますか?それが違いを生むなら、私はwin7を使用しています。

それはプログラムの重要な部分ではありませんが...それがうまくいったらいいのにと思います。誰もがここで何が悪いのか知っていますか?

ありがとう!

4

3 に答える 3

5

を使用して比較Stringするequals

これを変える:

if(args[0] == "HELP")

if(args[0].equals("HELP"))

==値の同等性ではなく、参照の同等性を比較します。値を確認する必要があるため、を使用しますequals()

詳細については、こちらのリンクをご覧ください。

とメソッドの違いを理解するために、これを読むこともできます。==equals()

于 2012-06-23T16:36:51.017 に答える
1

Stringインスタンスをequals()ではなく、と比較する必要があります==

だから使用するargs[0].equals("Help")

使用するとき==は、それらが完全に同じオブジェクトであるかどうかを確認します(つまり、オペランドが格納されているメモリ内のスポットが同じであるかどうかを確認します)。クラスのセマンティクス。

于 2012-06-23T16:36:52.547 に答える
0

文字列はオブジェクトであることは誰もが知っているので、で比較することはできません==。オブジェクト指向のコンテキストでは、==演算子を使用して、2つの参照が同じオブジェクトを指しているかどうかを確認します。したがって、このステートメントによって、

args[0] == "HELP"

参照args[0]と「HELP」文字列によって返される参照が同じオブジェクトを指しているかどうかをJVMに伝えていますが、これは確かではありません。ユーザーが入力した文字列と「HELP」文字列はまったく異なるオブジェクトであるためです。

2つのオブジェクトが文字通り(または意味のある形で)等しいことを確認したい場合は、equals()メソッドがあります。

したがって、最終的には、次のように書く必要があります

args[0].equals("HELP")
于 2012-06-23T16:47:40.493 に答える