2014-12-31 2 views
-1

Я написал класс, представляющий Полином. coefficients содержит коэффициенты. unknown содержит char, который представляет неизвестное.Может ли кто-нибудь объяснить это странное поведение toString?

Что ожидать, когда coefficients содержит [2,2,3]: "2x^2 + 2x + 3"

Реальность: "122.0^2 + 2.0x + 3.0x"

Код:

public class Polynom implements Comparable<Polynom> { 
private ArrayList<Number> coefficients; 
private int degree = 0; 
private char unknown = 'x'; 
private String name = "P(x)"; 

public Polynom() { 
    this("P(x)", 'x', null); 
} 


/** 
* Accepts Format: A1x^n + A2x^n-1 + ... + A(n-1)^1 + An 
* @param coefficients - Number array of coefficients (varargs) 
*/ 
@SafeVarargs 
public Polynom(Number... coefficients) { 
    this("P(x)", 'x', Arrays.asList(coefficients)); 
} 

public Polynom(String name, char unknown, List<Number> coefficients) { 
    this.name = name; 
    if (coefficients != null) 
     this.coefficients = new ArrayList<>(coefficients); 
    else 
     this.coefficients = new ArrayList<>(); 
    this.unknown = unknown; 
    this.degree = this.coefficients.size(); 
} 

@Override 
public String toString() { 
    StringBuilder sb = new StringBuilder(name + '='); 
    int cdeg = degree - 1; 
    for (Number a : coefficients) { 
     double absvalue = Math.abs(a.doubleValue()); 
     String sign = (a.doubleValue() > 0 ? " + " : " - "); 
     if (absvalue > 1) 
      if (cdeg != degree - 1) 
       sb.append(sign + absvalue + unknown 
         + (cdeg > 1 ? "^" + cdeg : "")); 
      else 
       sb.append(absvalue + unknown + (cdeg > 1 ? "^" + cdeg : "")); 
     else if (absvalue == 1) 
      if (cdeg != degree - 1) 
       sb.append(sign + unknown + (cdeg > 1 ? "^" + cdeg : "")); 
      else 
       sb.append(unknown + (cdeg > 1 ? "^" + cdeg : "")); 
     else 
      sb.append(sign + absvalue); 
     cdeg--; 
    } 
    return sb.toString(); 
} 

@Override 
public int compareTo(Polynom o) {...} 

@Override 
public boolean equals(Object o) {...} 
} 

public static void main(String[] args) { 
    Polynom p1,p2; 
    p1 = new Polynom(1,-2,3); 
    p2 = new Polynom(2,2,3); 
    System.out.println(p1+"\n"+p2); 
} 
+0

Извините, неизвестно держит символ, который представляет неизвестное, я уточню. –

+1

Вы используете 'int' или' double'? – issathink

+1

Можете ли вы показать нам, где определены коэффициенты? Фактический тип там (я подозреваю, что двойной) поможет вам отладить это. – Todd

ответ

1

Ваша проблема заключается в том, что вы пытаетесь объединить char - number, что приводит к дополнительному, а не к конкатенации, поскольку не участвует String.

Когда вы добавляете 2+unknown к вашим StringBuilder, вы добавление 2+'x', который 122120 является числовым значением символа «х»).

Изменить неизвестность от char до String.

String unknown = "x"; 

Это все, что вам нужно изменить.

+0

Быстро и легко. огромное спасибо! –

+0

Да, наверное, я пропустил это –