3

多項式を使用せずに多項式クラスを作成しました。自分Term(coefficient, exponent)で多項式を作成しています。

私は次のようないくつかの条件があります:

coefficient = 0 -> Term(0,2) -> 0x^2 -> "0"
coefficient = 1 -> Term(1,2) -> 1x^2 -> "x^2"
coefficient = -1 -> Term(-1,2) -> -1x^2 -> "-x^2"
exponent = 1 = -> Term(5,1) -> 5x^1 -> "5x"
exponent = 0 = -> Term(5,0) -> 5x^0 -> "5"

しかし、これらすべてを相互に機能するように実装することは、私に大きな頭痛の種を引き起こしTerm(-1,1)"-x""x"ますTerm(1,1)。toStringメソッドのためにこれらすべての「ルール」をグループ化するためのある種のロジックを考えるのを手伝ってくれる人はいますか?

4

5 に答える 5

1

これは私がそれを明確にするために得たのと同じくらい近いです

public class Term { 
    private final int coefficient;
    private final int exponent;

    public Term (final int coefficient,final int exponent) {
        this.coefficient = coefficient;
        this.exponent = exponent;           
    }

    @Override
    public String toString() {
        final String sign = getSign (coefficient);
        final String number = getNumber (coefficient);
        final String exponentStr = getExponentStr (coefficient, exponent);

        return String.format ("%s%s%s",sign, number, exponentStr);
    }

    private String getExponentStr(final int coefficient, final int exponent) {
        if (coefficient == 0 || exponent == 0) {
            return "";
        }
        if (exponent == 1) {
            return "x";
        }
        return "x^" + exponent;
    }

    private String getNumber(final int value) {
        final int absValue = Math.abs(value);

        return absValue == 1 ? "" : Integer.toString (absValue);
    }

    private String getSign(final int value) {
        return value < 0 ? "-" : "";
    }

    public static void main(String[] args) throws Exception {
        System.out.println(new Term (0, 2));
        System.out.println(new Term (1, 2));
        System.out.println(new Term (-1, 2));
        System.out.println(new Term (5, 1));
        System.out.println(new Term (5, 0));
    }
}

そしてそれのためのフィドル

于 2012-11-16T21:14:37.920 に答える
1

私は、博覧会をしないことは否定的ではないと思います。以下のようにしてみてください。

@Override
public String toString() {
    if(coef ==0){
        return "0";
    }else if(expo ==0){
        return ""+coef;
    }else{
        String pref = coef==1? "": coef==-1?"-":""+coef; 
        String suff = expo>1? "^"+expo:""; 
        return pref+"x"+suff;
    }
}

編集:を使用するにはStringBuilder、最後のステートメントを以下のように変更します (あまりメリットはありません)。

   return new StringBuilder(pref).append("x").append(suff).toString();
于 2012-11-16T21:16:47.620 に答える
1

最初の特別なケースと最後の特別なケースを組み合わせることができます。abs係数の値を調べることで、2 番目と 3 番目のケースを組み合わせることもできます。

// If the coefficient is zero or the exponent is zero,
// the result is simply the coefficient:
if (c == 0 || e == 0) {
    return ""+c;
}
StringBuilder res = new StringBuilder();
// Do not print the number for the coefficient of +/- 1
if (Math.abs(c) == 1) {
    // For +1 do not print the sign either
    if (c == -1) {
        res.append("-");
    }
} else {
    res.append(c);
}
res.append("x");
// For exponent of 1, do not print ^1
if (e != 1) {
    res.append("^");
    res.append(e);
}
return res.toString();
于 2012-11-16T21:09:56.937 に答える
1

ここでは順序が重要です。よく考えてみると、それcoefficient = 0が最初に行われるべきであることがわかるでしょう。次は、がまたはにexponent等しい場合の特殊なケースです。次に、 が の場合があります。残っているのは、負の otherか正のいずれかのデフォルトのケースだけです。したがって、if ステートメントは次のようになります。10coefficient-1coefficient-1coefficient

public String toString() {
    if(coefficient == 0){
      return "0";
    } else if ( coefficient == 1 && exponent != 0){
        return "x^"+exponent; 
    } else if ( exponent == 1){
      return coefficient+"x"; 
    } else if ( exponent == 0){
      return ""+coefficient; 
    } else if ( coefficient == -1){
      return "-x^"+exponent; 
    } else {
      return coefficient+"x^"+exponent; 
    }
}
于 2012-11-16T21:08:26.057 に答える
0

うーん、簡単にするためにできることはあまりありません。基本的に次のような場合があります。

係数 = 0 --> 表示 0 (指数は無関係)
係数 = +/- 1 --> 表示 - -1 の場合 ((-1,0) の特殊なケース)、それ以外の場合は何も
表示されない その他の係数 --> 保存されているとおりに表示

Exponent = 0 --> 何も表示しない
それ以外の場合は、x^exponent を表示します...

そう.....

public String toString() {
  String term = "";

  if (coefficient == 0) {
    return "0";
  } elseif (coefficient == -1) {
    if (exponent == 0) {
      return "-1";
    } else {
      term += "-";
    }
  } elseif (coefficient != 1) {
    term += String.valueOf(coefficient);
  } else {
    if (exponent == 0) {
      return "1";
    }
  }

  if (exponent != 0) {
    if (exponent == 1) {
      term += "x";
    } else {
      term += "x^" + String.valueOf(exponent);
    }
  }

  return term;
}

それはそれをカバーしていると思いますか?念のため、UnitTest にはかけませんでした。

于 2012-11-16T21:08:32.830 に答える