Ученик

# Почему метод ToString не рабоатет?

У меня есть некоторый класс

spoiler
``````using System;

namespace untc
{
class Fraction
{

private long numerator;
private ushort denumerator;

public long Numerator { get => numerator; }
public ushort Denumerator { get => denumerator; }

public override string ToString()
{
return String.Format("{0}/{1}", this.numerator, this.denumerator);
}

private void optimise()
{
long n = this.numerator;
long d = this.denumerator;
long remainder;
while (d != 0)
{
remainder = n % d;
n = d;
d = remainder;
}

this.numerator /= n;
this.denumerator /= (ushort)n;
}

public static Fraction operator +(Fraction a, Fraction b)
{
return new Fraction(a.Numerator * b.Denumerator + b.Numerator * a.Denumerator, a.Denumerator * b.Denumerator);
}

public static Fraction operator -(Fraction a, Fraction b)
{
return new Fraction(a.Numerator * b.Denumerator - b.Numerator * a.Denumerator, a.Denumerator * b.Denumerator);
}

public static Fraction operator *(Fraction a, Fraction b)
{
return new Fraction(a.Numerator * b.Numerator, a.Denumerator * b.Denumerator);
}

public static Fraction operator /(Fraction a, Fraction b)
{
return new Fraction(a.Numerator * b.Denumerator, a.Denumerator * b.Numerator);
}

public static bool operator ==(Fraction a, Fraction b)
{
return a.Numerator == b.Numerator && a.Denumerator == b.Denumerator;
}

public static bool operator !=(Fraction a, Fraction b)
{
return a.Numerator != b.Numerator || a.Denumerator != b.Denumerator;
}

public Fraction(long numerator, long denumerator)
{
if (denumerator == 0)
{
throw new System.ArgumentException();
}

if (numerator < 0 && denumerator < 0)
{
numerator = Math.Abs(numerator);
denumerator = Math.Abs(denumerator);
}

if (denumerator < 0 && denumerator > 0 || denumerator > 0 && numerator < 0)
{
numerator = -Math.Abs(numerator);
denumerator = Math.Abs(denumerator);
}

optimise();
}
}
}``````

Когда я хочу распечатать его и делаю Console.Write(new Fraction(1, 2)) или Console.Write(new Fraction(1, 2).ToString()), я получаю пустую консоль вместо ожидаемой строчки. Что я делаю не так?
• Вопрос задан
• 81 просмотр
Решения вопроса 1
@sarapinit
Точу водой камень
у вас ToString определен как
return String.Format("{0}/{1}", this.numerator, this.denumerator);

в нем используются поля класса
но в конструкторе вы поля класса не заполняете

сейчас
``````if (numerator < 0 && denumerator < 0)
{
numerator = Math.Abs(numerator);
denumerator = Math.Abs(denumerator);
}

if (denumerator < 0 && denumerator > 0 || denumerator > 0 && numerator < 0)
{
numerator = -Math.Abs(numerator);
denumerator = Math.Abs(denumerator);
}``````

должно быть
``````if (numerator < 0 && denumerator < 0)
{
this.numerator = Math.Abs(numerator);
this.denumerator = Math.Abs(denumerator);
}

if (denumerator < 0 && denumerator > 0 || denumerator > 0 && numerator < 0)
{
this.numerator = -Math.Abs(numerator);
this.denumerator = Math.Abs(denumerator);
}``````

Можете помечать приватные поля нижним подчеркиванием, тогда не будете путать их с локальными переменными, например _numerator, _denumerator
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

### Войдите, чтобы написать ответ

Похожие вопросы
Emsoft Москва
от 110 000 до 180 000 ₽
Tennisi Москва
от 170 000 ₽
ITM Холдинг Екатеринбург
от 70 000 ₽
19 февр. 2020, в 23:21
30000 руб./за проект
19 февр. 2020, в 22:05
4000 руб./за проект
19 февр. 2020, в 21:35
70000 руб./за проект