0
boolean hasTaxes(){
        return !state.equalsIgnoreCase("TX" || "NM" ||"VA" || "AZ" || "AK");
    }

上記のコードでは、The operator || is undefined for the argument type(s) java.lang.String, java.lang.Stringエラーが発生しました...つまり、引数||で演算子を使用できないということですか?equalsIgnoreCase()

4

6 に答える 6

2

||ではbooleanなく、両側に引数Stringが必要です。

state.equalsIgnoreCase("TX") || state.equalsIgnoreCase("NM") || ..

これらがチェックしたい固定コードである場合は、それらをEnumに入れて次のように使用する必要があります

public enum StateCode{
 CA, TX;
}

そしていま

TaxableStateCode stateCode = null;
try{
    stateCode = TaxableStateCode .valueOf(stringCode);
} catch(IlligalArgumentException ex){
   //log why it failed and other things you might want to do
}

if(stateCode == null){
  // invalid code was supplied for TaxableStateCode 
}

それらが時間の経過とともに変化することが予想される場合は、効果を適用するためにコードを変更する必要がないように、データベースまたは構成可能なプロパティ ファイルのどこかに配置する必要があります。

于 2012-12-06T17:49:14.523 に答える
2

equalIgnoreCase() のパラメーターは文字列です。"TX" || "NM" ||"VA" || "AZ" || 「AK」は文字列ではないため、パラメーターが未定義になります。これらの状態をすべて配列に入れ、各状態に equalIgnoreCase() を使用するのではなく、配列にテキストが含まれているかどうかを確認することをお勧めします

于 2012-12-06T17:50:38.880 に答える
2

||機能しない文字列に対して演算子を使用しようとしています。代わりにこれを試してください

return !state.equalsIgnoreCase("TX") &&
!state.equalsIgnoreCase("NM" ) &&
!state.equalsIgnoreCase("VA") &&
!state.equalsIgnoreCase("AZ" ) &&
!state.equalsIgnoreCase("AK");

メソッド||によって返されるブール値で演算子を使用する必要があります。equalsIgnoreCase

于 2012-12-06T17:50:55.243 に答える
2

Java はそのような考えをサポートしていません ( ||Java の論理 OR 演算子です) が、これを行うことができます:

private static List<String> states = Arrays.asList("TX", "NM", "VA", "AZ", "AK");

次に、あなたの方法で:

return !states.contains(state.toUpperCase());

どちらが多かれ少なかれあなたのアイデアを捉えています。

編集:

OPを怖がらせないように、これをシンプルに保ちたかったのですが、人々が声を上げたので、ここに...

実行速度を上げたい場合はHashSet、コレクション タイプとして a を使用する方がよいので、次のようにします。

private static Set<String> states = new HashSet(
    Arrays.asList("TX", "NM", "VA", "AZ", "AK"));

スタイルに完全にこだわりたい場合は、次のようにします。

private static final Set<String> STATES = Collections.unmodifiableSet(
    new HashSet(Arrays.asList("TX", "NM", "VA", "AZ", "AK")));
于 2012-12-06T17:54:08.490 に答える
0

||booleanはオペランドに適用されますが、 Strings には適用されません。

次のように、よりクリーンな方法でコードを言い換えることができます。

    enum Tax {TX, NM, VA, AZ, AK}

    boolean hasTaxes(String state) {
        for (Tax tax : Tax.values()) {
            if (state.equalsIgnoreCase(tax.name())) {
                return false;
            }
        }
        return true;
    }
于 2012-12-06T17:54:23.363 に答える
0

これを試すことができると思います:

String states = "@TX@NM@VA@AZ@AK@";
if(noTaxStates.length() ==2 && 
                          states.indexOf("@"+noTaxStates.toUpperCase()+"@") >0){
     //state exist
}
于 2012-12-06T17:56:14.193 に答える