Fraction的一年四季变化之——加法 (含与用户交互框版)

Fraction的四季变化之——加法 (含与用户交互框版)
/* (程序头部注释开始) </p><p>* 程序的版权和版本声明部分 
* Copyright (c) 2011, 烟台大学计算机学院学生                              
* 作    者:   李兆庆                         
* 完成日期:   2012      年   9    月    9   日 
* 输入描述:   
* 问题描述及输出:  编写一个Java应用程序,实现功能:分数的加法运算编程
* 编程思路:分数相加,两个分数分别是1/5和7/20,它们相加后得11/20。方法是先求出两个分数分母的最小公倍数,通分后,再求两个分子的和,
* 最后约简结果分数的分子和分母(如果两个分数相加的结果是4/8,则必须将其化简成最简分数的形式1/2),
* 即用分子分母的最大公约数分别除分子和分母。请用四个对话框顺序输入分子和分母,在控制台上输出其运算结果;
* 知识扩展:先求gcd(最大公约数)再求lcm(最小公倍数)。 最小公倍数等于两数之积除以最大公约数。
 *例:求12和8的最小公倍数。
            12和8的最大公约数为4,
            12×8÷4=24 ,
           所以两数的最小公倍数是24。
* 程序头部的注释结束 。
*/
 
import javax.swing.JOptionPane; //此函代码必须包含的哦,与用户交互框的生成有关

public class ft {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 String str1=JOptionPane.showInputDialog("请输入第一个分数的分子");//用于对话框内的文字输出  
         int a1=Integer.parseInt(str1); 
         String str2=JOptionPane.showInputDialog("请输入第一个分数的分母");//用于对话框内的文字输出  
         int a2=Integer.parseInt(str2); 
         String str3=JOptionPane.showInputDialog("请输入第二个分数的分子");//用于对话框内的文字输出  
         int b1=Integer.parseInt(str3); 
         String str4=JOptionPane.showInputDialog("请输入第二个分数的分母");//用于对话框内的文字输出  
         int b2=Integer.parseInt(str4); 

		fracAdd(a1,a2,b1,b2);//结果为:11/20
		//fracSub(1,5,7,20);//分数相减
		//fracMul(1,5,7,20);//分数相乘
		//fractDiv(1,5,7,20);//分数相除

	}
	static void fracAdd(int first_numerator,int first_denominator,int second_numrator,int second_denominator){
		//以下代码能够在控制台上显示结果
		int lcm,gcd,numera,deomina;
		
		lcm = lcm(first_denominator,second_denominator);//需要调用求最小公倍数的函数求的最小公倍数
		
		numera = (lcm/first_denominator)*first_numerator+(lcm/second_denominator)* second_numrator;//  未化简的分子和
		
		deomina = lcm;             //未化简的分母
		
		gcd = gcd(numera,deomina); //需要调用求最大公约数的函数
		
		numera = numera/gcd;       //化简后的分子
		
		deomina = deomina/gcd;     //化简后的分母
		
		System.out.println(first_numerator+"/"+first_denominator+"+"+second_numrator+"/"+second_denominator+"="+numera+"/"+deomina);//
		
	}
	//求最大公约数
	static int gcd(int m,int n){
		int i = 2;       //定义整型变量i,为循环变量
		int g, min;
		min = min(m,n);
		g = 1;           //最大公约数初始值为1
		while(i <= min)  //判断条件,一直循环到两个数中较小的那个结束
		{
			while (m % i == 0 && n % i == 0)
			{
				m = m / i;
				
				n = n /i;
				
				min( m, n );
				
				g = g * i;
			}
			
			i++;
		}
		
		return g;
		
	}
	//求最小公倍数函数,其中最小公倍数求法参见程序头部注释“知识扩展”
	static int lcm(int m,int n){
		int g, l;
		g = gcd(m,n);       //调用求最大公约数函数,求得m,n的最大公约数。
		l = m * n / g;
		return l;
	}
	//求较小值函数
	static int min(int m,int n){
		if (m>n){
			return n;
		}
		else{
			return m;
		}
	}
	
}

Fraction的一年四季变化之——加法 (含与用户交互框版)