目前,我有一个类分数,它允许我用三种不同的方式创建分数
gcd将尽可能减少生成的分数。
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;
}
}
我现在想实现的是,具有相同分子和分母的分数实例具有相同的引用例如。
*Fraction.parseFraction("1/2").equals(Fraction.parseFraction("2/4"))*
应该返回true。
我研究了一些关于泛型和边界的章节,但我不确定这是否是我所需要的正确方向。分数类是否应限定为字符串和整数?
我现在想实现的是,具有相同分子和分母的分数实例具有相同的引用例如。
我想你的意思是在这里有相同的价值?
您将遇到使用int计算该值的问题(以及使用float或double进行计算)——弄清楚为什么这些事情很困难,以及如何缓解它们,将教会您很多东西。
阅读String.intern()所做的事情(例如,这只是第一个Google结果:https://dzone.com/articles/string-interning-what-why-and),并做同样的事情,但对于您的Fraction类。
问题内容: 我有以下代码来获取地图: 如何打印带有重复键的消息“重复键”? 问题答案: 如何打印带有重复键的消息“重复键”? 使用当前代码,您将收到消息“重复键”,其中包含至少2个实例的列表,这些实例具有与对象相同的值,例如。 如何获得对应的密钥? 到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。 您的问题是 Java 9
...NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalStateException:映射到HTTP路径的处理程序方法不明确...
问题内容: 很抱歉,我只学习了PHP和MySQL,已经搜索了一个多星期,但是没有找到任何答案。 我创建了一个简单的财务脚本,该表如下所示: 我想要这样的结果 有人可以帮助我解决我的问题吗? 谢谢 问题答案: 正如@Quassnoi指出的那样,这对于MySQL来说不是很有效。我尝试使用怪胎连接而不是子查询,因为内部查询本身就可以使用。 编辑 对此引起了一些兴趣,发现连接版本的速度是@Quassnoi
问题内容: 我正在查看数据库中的一个表(我没有创建该表),我发现有两个完全相同的索引(我不知道为什么这样做)只是命名不同,这可以对桌子有负面影响吗? 拿这个例子表: 问题答案: 是的,它可以起作用。 当然,如果使用这两个索引,它们会占用磁盘和内存的额外空间。 但是,它们还会使查询优化器做更多的工作来计算每个SELECT期间每个索引的收益。您拥有的索引越多,需要比较的案例就越多。因此,消除真正的冗余
问题内容: 在以下代码中,我不明白为什么当它属于两个不同的对象时具有相同的ID? 问题答案: 我认为这是正在发生的事情: 取消引用时,将在内存中创建其副本。该存储位置由以下位置返回 由于没有引用到刚刚创建的方法的副本,因此GC将其回收,并且该内存地址再次可用 取消引用时,将在相同的内存地址(可用)中创建它的副本,您可以再次使用该地址。 第二个副本是GCd 如果您要运行一堆其他代码并再次检查实例方法
问题内容: 在Java中,实例变量和方法可以具有相同的名称而没有任何不稳定或冲突吗? 我想确保是否可以摆脱它的编译问题,以免造成任何错误。 问题答案: 是的,这很好,主要是因为在语法上,它们的用法不同。