Страницы

Поиск по вопросам

суббота, 13 октября 2018 г.

Переопределение ToString в собственном классе

Есть класс Polynom. В нем многочлен задается массивом коэффициентов. нужно вывести многочлен в консоль в виде, например, 3x^4+2x^3+1, используя String.format
Класс выглядит так:
public class Polynom { public int[] coefficients; public int polynomDegree; public string x; public int[] powers;
// задать полином при помощи коэффициентов public Polynom(params int[] coefficients) { this.coefficients = coefficients; }
//свойство степени многочлена public int PolynomDegree { get { for (int i = 0; i < coefficients.Length; i++) { powers[i] = i; } return powers.Length - 1; } }

public override string ToString() { object[] args = new object[] { this.coefficients, this.powers }; return string.Format("Polynom {0}" + "x^{1}", string.Join("" + "x^", args));
}
//индексатор на чтение и запись public int this[int index] { set { this.coefficients[index] = value; }
get { return this.coefficients[index]; } }


Ответ

Так просто через string.Format() здесь не получится, он не работает с переменным количеством аргументов.
Мой вариант с использованием StringBuilder
class Polynom { //int[] coefficients = new int[] { 1, 2, -6, 2, 3 }; ...
public override string ToString() { var sb = new StringBuilder(); for (int i = coefficients.Length - 1; i >= 0; --i) { if (coefficients[i] == 0) continue; if (coefficients[i] > 0 && sb.Length > 0) sb.Append('+'); if (coefficients[i] < 0) sb.Append('-'); var abs = Math.Abs(coefficients[i]); if (abs != 1 || i == 0) sb.Append(abs); if (i > 0) sb.Append('x'); if (i > 1) sb.Append('^').Append(i); } if (sb.Length == 0) return "0"; return sb.ToString(); } }
Учтено: 1. Члены с нулевым коэффициентом не выводятся. 2. Корректно отображается знак +/- перед коэффициентом, если старший коэффициент положительный — + перед ним не отображается. 3. Не отображается степень при x^1 4. Не отображается x^0 при свободном члене. 5. Если все коэффициенты равны 0 — отображается 0 6. Коэффициент 1/-1 отображается только для свободного члена
Пример вывода: 3x^4+2x^3-6x^2+2x+1

Комментариев нет:

Отправить комментарий