设计一个分数类java_Java中一个分数类的简单设计

本文介绍了如何设计一个Java分数类,该类提供了分数化简、加减乘除操作,并基于不可变原则确保线程安全。类中包含了分数化简、通分、最大公约数和最小公倍数等算法。通过控制台输入进行分数操作,支持加、减、乘、除四种运算。
摘要由CSDN通过智能技术生成

这个类对于分数提供化简和加减乘除四种操作,基于"不变"的设计原则,因此是线程安全的. 其中使用了几个算法: [1]Fraction simpler(Fraction f);//分数化简 [2]Fraction[] RCD(Fraction f1, Fraction f2);//通分 [3]int GCD(int s, int b);//最大公约数 [4]int

这个类对于分数提供化简和加减乘除四种操作,基于"不变"的设计原则,因此是线程安全的.

其中使用了几个算法:

[1]Fraction simpler(Fraction f);//分数化简

[2]Fraction[] RCD(Fraction f1, Fraction f2);//通分

[3]int GCD(int s, int b);//最大公约数

[4]int LCM(int a, int b);//最小公倍数

使用的形式:

[1]在控制台输入[分数][回车] //化简

[2]在控制台输入[分数][空格][运算符][空格][分数][回车] //计算

其中[运算符]为+ - * / 之一.

Fraction.java

package net.zj.fraction;

import java.io.IOException;

public class Fraction {

private int numeraTor;

private int denominaTor;

public Fraction(int numeraTor, int denominaTor) {

this.numeraTor = numeraTor;

this.denominaTor = denominaTor;

}

public Fraction(int numeraTor) {

this(numeraTor, 1);

}

public static Fraction add(Fraction f1, Fraction f2) {

Fraction[] fs = RCD(f1, f2);

Fraction add = new Fraction(fs[0].numeraTor + fs[1].numeraTor,

fs[0].denominaTor);

return simpler(add);

}

public static Fraction minus(Fraction f1, Fraction f2) {

Fraction[] fs = RCD(f1, f2);

Fraction minus = new Fraction(fs[0].numeraTor - fs[1].numeraTor,

fs[0].denominaTor);

return simpler(minus);

}

public static Fraction multi(Fraction f1, Fraction f2) {

Fraction multi = new Fraction(f1.numeraTor * f2.numeraTor,

f1.denominaTor * f2.denominaTor);

return simpler(multi);

}

public static Fraction div(Fraction f1, Fraction f2) {

return multi(f1, new Fraction(f2.denominaTor, f2.numeraTor));

}

public static void input(String s) {

String[] ss = s.split(" ");

if (ss.length == 1) {

Fraction f = StringToFraction(ss[0]);

if (f == null)

output("Usage: Should input a numeric");

else

output(f);

} else if (ss.length == 3) {

Fraction f1 = StringToFraction(ss[0]);

Fraction f2 = StringToFraction(ss[2]);

if (f1 == null) {

output("Usage: The first input should be numeric/numeric");

return;

}

if (f2 == null) {

output("Usage: The third input should be numeric/numeric");

return;

}

switch (ss[1].charAt(0)) {

case '+':

output(add(f1, f2));

break;

case '-':

output(minus(f1, f2));

break;

case '*':

output(multi(f1, f2));

break;

case '/':

output(div(f1, f2));

break;

default:

output("Usage: The second input should be one of +-*/");

break;

}

} else

output("Usage: Should input one fraction or two fractions and a operaTor with the style. 'f1 + f2'");

}

public static void output(Fraction f) {

if (f.denominaTor == 1) {

System.out.println(f.numeraTor);

return;

}

StringBuilder sb = new StringBuilder();

sb.append(f.numeraTor);

sb.append('/');

sb.append(f.denominaTor);

System.out.println(sb.toString());

}

public static void output(String s) {

System.out.println(s);

}

private static Fraction StringToFraction(String s) {

String[] ss = s.split("/");

try {

if (ss.length == 2)

return simpler(new Fraction(Integer.valueOf(ss[0]), Integer

.valueOf(ss[1])));

else if (ss.length == 1)

return new Fraction(Integer.valueOf(ss[0]));

else

return null;

} catch (NumberFormatException e) {

output("Usage: Should input one fraction or two fractions and a opera

好的,关于 Java 创建一个分数的问题,我可以为您提供以下代码: ``` class Fraction { private int numerator; private int denominator; public Fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } public int getNumerator() { return numerator; } public int getDenominator() { return denominator; } public Fraction add(Fraction other) { int newDenominator = lcm(denominator, other.denominator); int newNumerator = numerator * (newDenominator / denominator) + other.numerator * (newDenominator / other.denominator); return new Fraction(newNumerator, newDenominator).simplify(); } public Fraction subtract(Fraction other) { int newDenominator = lcm(denominator, other.denominator); int newNumerator = numerator * (newDenominator / denominator) - other.numerator * (newDenominator / other.denominator); return new Fraction(newNumerator, newDenominator).simplify(); } public Fraction multiply(Fraction other) { int newNumerator = numerator * other.numerator; int newDenominator = denominator * other.denominator; return new Fraction(newNumerator, newDenominator).simplify(); } public Fraction divide(Fraction other) { int newNumerator = numerator * other.denominator; int newDenominator = denominator * other.numerator; return new Fraction(newNumerator, newDenominator).simplify(); } public boolean equals(Fraction other) { return numerator * other.denominator == denominator * other.numerator; } @Override public String toString() { return numerator + "/" + denominator; } private int gcd(int a, int b) { if (b == 0) { return a; } else { return gcd(b, a % b); } } private int lcm(int a, int b) { return a * b / gcd(a, b); } private Fraction simplify() { int gcd = gcd(numerator, denominator); if (gcd != 1) { return new Fraction(numerator / gcd, denominator / gcd); } else { return this; } } } ``` 这是一个基本的分数,其包含四则运算和一些基本操作。您可以在此基础上进行扩展和优化。希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值