2015-12-10 5 views
-4

Im в настоящее время делает программу с кучей методов. В этом методе речь идет о фракциях. Пользователь должен ввести целочисленный числитель и знаменатель, например 9/5 (не с десятичными знаками, такими как 3.2/1.4).Как использовать дробь в java

После того, как этот метод выполнил свою работу, он должен вернуть результат основному методу, в данном случае 1_4/5. Проблема, с которой я столкнулась, заключается в том, что ответ должен быть возвращен как строка. Невозможно заставить его работать. Если возвращаемое целое число или дробь равно 0, его также следует обрабатывать «лучше».

Не разобрался с длинным выстрелом, но вот маленький код, который я до сих пор придумал. Может быть, легче понять проблему. Спасибо заранее!

public static String fraction(int numerator, int denominator){ 
     fractionQuota = numerator/denominator; 
     fractionRest = numerator % denominator; 
     return fractionQuota; 
+2

Сделайте несколько примеров ввода и то, что вы ожидаете вернуть. –

+0

Подумайте о том, какие параметры вы должны получить, чтобы получить ответы. Например, целочисленное деление даст вам 1 в вашем примере. Как вы можете получить остаток? – ChiefTwoPencils

+1

Вы знаете, что вам нужно будет иметь возможность пересчета чисел, чтобы упростить ваши дроби? Кроме того, что вы можете сделать, это взять числитель и посмотреть, сколько раз знаменатель вписывается в него. Затем сделайте смешанную фракцию упрощенной. – WIR3D

ответ

1

Примечание: Я сделал предположение о том, что числитель и знаменатель являются положительными, а знаменатель строго положительным. Код «работает», но отформатирован как -1_-4/5, что не очень приятно.

Сначала я думаю, что вы хотите нормализовать вашей фракции: уменьшить это такое, что 21/15 возвращается к 7/5 первым. Вы можете сделать это, предварительно вычислив наибольший общий делитель. Я «позаимствовал» мой own method:

private static int gcd(int a, int b) { 
    int t; 
    while(b != 0){ 
     t = a; 
     a = b; 
     b = t%b; 
    } 
    return a; 
} 

Теперь, когда у нас есть, что мы можем нормализовать фракцию:

public static String fraction(int numerator, int denominator){ 
    int div = gcd(Math.abs(numerator),denominator); 
    numerator /= div; 
    denominator /= div; 
    //TODO 
    //... 
} 

Далее нам нужно найти целую часть, это может быть сделано с:

int intPart = (numerator/denominator); 

Далее мы можем вычислить остаток часть с:

int remPart = numerator-intPart*denominator; 

Наконец мы используем String.format, чтобы поставить все это вместе в String:

return String.format("%d_%d/%d",intPart,remPart,denominator); 

Так метод гласит:

public static String fraction(int numerator, int denominator){ 
    int div = gcd(Math.abs(numerator),denominator); 
    numerator /= div; 
    denominator /= div; 
    int intPart = (numerator/denominator); 
    int remPart = numerator-intPart*denominator; 
    return String.format("%d_%d/%d",intPart,remPart,denominator); 
} 

Demo: вы можете использовать this jDoodle.