2015-11-18 9 views
0

У меня есть этот метод в моем классе фракции,Как преобразовать отрицательное смешанное число в неправильную фракцию?

public void toImproper() { 
    if (denom == 0) { 

     denom = 1; 
    } 
    num = (denom * coeff) + num; 
    coeff = 0; 

} 

Я использую несколько тестов в этой фракции калькуляторе Я делаю такие как -1_1/2 * 2, но я получаю 1 как мой ответ (следующий абзац очищает это).

Вначале я помещаю его в неправильную форму, так как получаю вход, но делает его неправильным. СНОВА дает мне некоторые проблемы. Из-за моего метода он делает -1_1/2 = -1/2. -1_1/2 в неправильной форме должно быть -3/2, но мой метод дает -1/2. Это связано с тем, что он умножает коэффициент на знаменатель, а затем добавляет числитель. Итак, для числителя вы получаете (-1 * 2) + 1. Как я могу это исправить? Я думал об использовании Math.abs(); но затем он делает все негативы положительными.

Спасибо!

+0

нельзя сказать, что вы пытаетесь сделать. Каков вклад и какой результат вы ожидаете? Что такое 'coeff'? Что такое 'num' и где вы его инициализируете? – ajb

+0

Извините, coeff - это целое число в моей смешанной дроби (-1), num = числитель, и оно инициализируется ранее в программе. Я ожидал -3/2, но я получаю -1/2. – Jop

+0

ОК, это помогает уточнить. Для записи я не думаю, что «коэффициент» - это правильный термин для части целого числа, которая является частью путаницы. – ajb

ответ

0

Проблема в том, что если вы вводите -1 1/2 (coeff=-1, num=1, denom=2), программа рассматривает это как (-1) + (1/2). То есть, он интерпретирует 1/2 часть как положительную, как обычно. Вам нужно сделать что-то особенное, чтобы обмануть программу в мышлении. 1/2 действительно означает -1/2 в этом случае.

Установка этого перед назначением на num является одним из способов обмануть программу:

if (coeff < 0) { 
    num = -num; 
} 
+0

Хорошо, спасибо, извините, путаница. – Jop