6

この状態を短縮する他の方法はありますか?

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") ||
oper.equals("Addition") || oper.equals("+"))

これを「ショートカット」するために何かできることがあるかどうか疑問に思っていました。ユーザーは、単純な電卓プログラムで実行する操作の種類を尋ねられたときに、文字列を入力します。私たちの教授は、私たちのプログラムは、ユーザーが小文字で「追加」または「追加」を入力するかどうかを受け入れる必要があると言いました...それとも、私がそれを行う唯一の方法ですか?

4

5 に答える 5

9

String#equalsIgnoreCase(String)最初の 4 つの文字列に使用できます: -

if (oper.equalsIgnoreCase("add") || 
    oper.equalsIgnoreCase("addition") || 
    oper.equals("+"))

文字列の数が増える場合はList、 を使用したほうがよいでしょう。そのcontainsメソッドを使用します。ただし、これらの入力については、このアプローチのみに従うことができます。


これにアプローチする別の方法String#matches(String)は、正規表現を取るメソッドを使用することです: -

if (oper.matches("add|addition|[+]")

ただし、これには正規表現は必要ありません。特に、このメソッドは、より大きな入力に対して醜くなる可能性があります。しかし、それはこの場合の方法にすぎません。したがって、どちらかを選択できます。最初のものは、最初に見るのがより明確です。


または、 を使用enumして を保存operatorsし、そのインスタンスをstring. 作業がより簡単になります。列挙型は次のようになります。

public enum Operator {
    ADD,
    SUB,
    MUL,
    DIV;
}

必要に応じて拡張できます。ユーザー入力を取得しているため、最初にそれに基づいて適切な列挙型インスタンスを識別する必要があることに注意してください。その後、文字列ではなく、その列挙型インスタンスで作業できます。

于 2013-01-24T12:58:58.723 に答える
4

@Rohitの回答に加えて、これを追加したいと思います。

文字列の比較の場合oper is null、 aNullPointerExceptionをスローできるかどうか。だから、常に書くほうがいい

"addition".equalsIgnoreCase(oper)

それ以外の

oper.equalsIgnoreCase("addition")
于 2013-01-24T13:04:57.917 に答える
3

aDDが無効な入力と見なされる場合は、次のアプローチを検討できます。

ArrayList<String> possibleInputs = new ArrayList<String>();

possibleInputs.add("Add");
possibleInputs.add("add");
possibleInputs.add("Addition");
possibleInputs.add("addition");
possibleInputs.add("+");

if(possibleInputs.contains(oper))
{
    // ...
}
于 2013-01-24T13:03:30.500 に答える
0

入力を取得し、小文字に変換してから比較することができます。

str.toLowerCase()

次に、if()ステートメントに渡します

if(str.equals("add") || str.equals("addition") || str.equals("+"))
于 2013-01-24T13:19:59.643 に答える
0

isOperationAddition(String s){...}ブール値を返すという名前の関数内にそのコード全体をスローします。

したがって、この:

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") ||
    oper.equals("Addition") || oper.equals("+")){...}

これに対する変更

if (isOperationAddition(operation)){...}

次に、そのメソッド内で、if ステートメントのブランチ マテリアルとして文字列を使用しないでください。それがどの種類の操作であるかを定義する変数を用意し、「野蛮人 (混乱/あいまいなユーザー) を堀に近づけないでください」。どの操作を扱っているかを覚えておくために、常にリストに対して繰り返し処理を行うべきではありません。

于 2013-01-24T13:03:18.483 に答える