2014-11-24 87 views
0

嗨我是新來的java和我在分數計算器上工作,我無法弄清楚如何讓計算器減少簡單分數和添加混合分數。 示例: 縮減:1/2 + -5/6 = -1/3
混合分數:4_15/16 + -3_11/16 = 1_1/4 編輯:對於混合分數,我嘗試從分子中減去num> den的分母以獲取整個和剩餘部分,並將其返回並打印出來,但不打印任何內容。餾分計算器添加

import java.util.Scanner; 

public class Fraction { 
public static void main(String[] args) { 
    System.out.println("Enter an Expression or quit:"); 
    Scanner input = new Scanner(System.in); 
    String text = input.nextLine(); 
    while (!text.equals("quit")){ 
    String frac1 = text.substring(0,text.indexOf(" ")); 
    String oper = text.substring((text.indexOf(" "))+1,(text.indexOf(" "))+2); 
    String frac2 = text.substring((text.indexOf(" "))+3); 
    int fn1 = num(frac1); //frac1 numerator 
    int fd1 = den(frac1); //frac1 denominator 
    int fn2 = num(frac2); //frac2 numerator 
    int fd2 = den(frac2); //frac2 denominator 
    if (oper.equals("+")){ 
     int sumfinalnum = add(fn1, fd1, fn2, fd2); 
     if (fd1 == 1 && fd2 == 1){ 
      System.out.println(sumfinalnum); 
      } 
     else if ((fn1 + fn2)==0){ 
      System.out.println("0"); 
     } 
     else if (fd1 == fd2){ 
      if (sumfinalnum>fd1){ 
        System.out.println(extractWholePart(sumfinalnum,fd1)+"_"+extractNumPart(sumfinalnum,fd1)+"/"+fd1); 
      } 
      else{ 
     System.out.println(sumfinalnum+"/"+fd1); 
     } 
     } 
     else if (!(fd1 == fd2)){ 
     System.out.println(sumfinalnum+"/"+(fd1*fd2)); 
     } 
     System.out.println("Enter an Expression or quit:"); 
     text = input.nextLine(); 
     } 
    } 
    } 

public static int num(String input){ 
    if (input.contains("_")){ //mixed to improper 
     String a = input.substring(0,input.indexOf("_")); 
     String b = input.substring((input.indexOf("_"))+1,input.indexOf("/")); 
     String c = input.substring((input.indexOf("/"))+1); 
     int a1 = Integer.parseInt(a); 
     int b1 = Integer.parseInt(b); 
     int c1 = Integer.parseInt(c); 
     int d = a1*c1; 
     int e = d+b1; 
     return e;   
    } 
    else if (!input.contains("/")){ 
     int input1 = Integer.parseInt(input); 
     return input1; 
    } 
    else { 
    String strnum1 = input.substring(0,input.indexOf("/")); 
    int num1 = Integer.parseInt(strnum1); 
    return num1; 
    } 
} 
public static int den(String input){ 
    if(!input.contains("/")) {  //whole 
     return 1; 
    } 
    String strnum2 = input.substring((input.indexOf("/"))+1); 
    int num2 = Integer.parseInt(strnum2); 
    return num2; 

} 

public static int add(int fn1,int fd1,int fn2,int fd2){ 
    if (fd1 == fd2){ //matching denominator 
     int numadd = fn1 + fn2; 
     return numadd; 
    } 
    else if (fd1 == 1 && fd2 == 1){ //whole numbers no denom 
     int sum = fn1 + fn2; 
     return sum; 
    } 
    else if (!(fd1 == fd2)){ //different denominator*** 
     int dencomadd = fd1*fd2; 
     int gcd1 = dencomadd/fd1; 
     int gcd2 = dencomadd/fd2; 
     int comf1num = fn1*gcd1; 
     int comf2num = fn2*gcd2; 
     int total = comf1num+comf2num; 
     return total; 
    } 
    else{ 
     return 0; 

    } 


} 
public static int extractWholePart(int finalnum, int finalden){ 
    int whole = 0; 
    while (finalnum > finalden){ 
     whole++; 
    } 
    return whole; 
} 
public static int extractNumPart(int finalnum, int finalden){ 
    while (finalnum > finalden){ 
     finalnum -= finalden; 
    } 
    return finalnum; 
} 
} 
+0

爲了減少一小部分:如果結果是A/B,則找到G ='的Math.abs最大公約數(A)'和B.然後減少除以A和B的分數。所以如果A = -4和B = 12,G將是4,然後你將A和B除以4得到-1/3。如果您不知道如何找到最大公約數,請在維基百科中查找「歐幾里德算法」。 – ajb 2014-11-24 23:00:03

回答

0

讓我們開始 - 這是java的,不要怕使用較大的變量名。 fn1很可能被稱爲fraction1Numerator

接下來,有一個方法來做它設計的目的。有一個add方法需要其他四個 - 如果在main不是一個好主意。

創建一個對象Fraction,將有成員變量numeratordenominator將使您add函數返回一個完整的答案。畢竟你有代碼添加看起來不錯的混合分數。

class Fraction{ 
    public int whole; 
    public int numerator; 
    public int denominator; 
} 

我還在簡化後加了「整」來表示整個部分。 add功能會比有特色

public static Fraction add(Fraction fraction1, Fraction fraction2) ... 

提取完整的數字很簡單 - 減去分子分母,直到你不能再這樣了。在另一方面

public void extractWholePart(Fraction fraction){ 
    int whole = 0; 
    while (fraction.numerator > fraction.denominator){ 
     whole++; 
     fraction.numerator -= fraction.denominator; 
    } 
    fraction.whole = whole; 
} 

簡化只是將兩個提名和分母的最大公約數 - algorythm計算是在互聯網上很容易瑪麗薩。

0

嘗試是這樣的

float mixedToDecimal(String data) 
// data would be like this "1 5/8"; 
String[] parts = data.split(" "); 
if(!(parts.lenght > 0)) // this mean that if data is NOT mixedfraction then just return -1 
    return -1; 
float value = Integer.parseInt(parts[0]); 
if (parts.length > 1) { 
    // has fractional part 
    parts = parts[1].split("/"); 
    float numerator = Integer.parseInt(parts[0]); 
    float denominator = Integer.parseInt(parts[1]); 
    value += numerator/denominator; 
} 
// value contains 1.625 
return value; 
+0

我很難以小數形式返回它,如果它包含整數,則需要有下劃線。 – Jenny 2014-11-25 05:51:14

+0

回答更新請看看。 – Junaid 2014-11-25 05:59:03