Java 相同的实例应该具有相同的引用
目前我有一个分数类,它允许我以三种不同的方式创建分数Java 相同的实例应该具有相同的引用,java,generics,fractions,bounded-wildcard,Java,Generics,Fractions,Bounded Wildcard,目前我有一个分数类,它允许我以三种不同的方式创建分数 对于一个整数,在这种情况下,给定的整数将是分子,分母将设置为1 有2个整数,分子和分母 最后一种方法是解析必须与正则表达式-?\d+/[1-9]\d匹配的字符串* 生成的分数将通过gcd尽可能减少 public class Fraction extends Number { public static final String REGEX = "-?\d+/[1-9]\d*"; public stat
- 对于一个整数,在这种情况下,给定的整数将是分子,分母将设置为1
- 有2个整数,分子和分母
- 最后一种方法是解析必须与正则表达式-?\d+/[1-9]\d匹配的字符串*
public class Fraction extends Number {
public static final String REGEX = "-?\d+/[1-9]\d*";
public static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
public static Fraction parseFraction(String s) {
if (!s.matches(REGEX)) {
throw new RuntimeException("Parsing error");
}
String[] splitted = s.split("/");
return new Fraction(Integer.parseInt(splitted[0]),
Integer.parseInt(splitted[1]));
}
private int numerator;
private int denominator;
public Fraction(int numerator) {
this(numerator, 1);
}
public Fraction(int numerator, int denominator) {
if (denominator == 0) {
throw new RuntimeException("denominator == 0 is not possible");
}
int gcd = Fraction.gcd(numerator, denominator);
if (denominator / gcd < 0) {
gcd *= -1;
}
this.numerator = numerator / gcd;
this.denominator = denominator / gcd;
}
}
应该返回true
我看了一些关于泛型和边界的章节,但我不确定这是否是我所需要的正确方向。分数类是否应限定为字符串和整数
我现在想实现的是,具有相同分子和分母的分数实例具有相同的引用,例如
我想你的意思是在这里有相同的价值
您将遇到使用整数计算该值(以及使用浮点或双精度计算)的问题—弄清楚为什么这些事情很困难,以及如何减轻它们,将教会您很多东西
阅读String.intern()所做的事情(例如,这只是第一个Google结果:),然后做同样的事情,但是对于你的分数类。通常你不需要==。你应该让分数彼此相等。你是说REGEX
-?\d+/[1-9]\d*
,用\
而不是/
?分数类是否应该限定为字符串和整数?不。泛型是一个编译时类型的安全系统,它不会帮助您解决创造性问题。您需要确保返回单个引用;第一部分几乎肯定是让构造函数私有化
(或包私有化),并使用创造性模式。您需要填充(并维护)一个引用池。是的,-?\d+/[1-9]\d*是我的意思do@Trikalium然后编辑问题并修复正则表达式。
*Fraction.parseFraction("1/2").equals(Fraction.parseFraction("2/4"))*