java - Java如何将0作为分母显示在有理类中
问题描述
现在,在运行我的 Rational 程序时,我在创建一个分子为 2 分母为 0 的新有理数时得到 1,我的老师希望我用 1 而不是 0 替换分母,但我无法得到每当尝试在 reduce 方法中添加 if 用于将分数简化为最简单的形式时,都会出现堆栈溢出错误。我还尝试在包含分子和分母的有理对象所在的构造函数中添加一个 if 语句,但仍然无济于事。当用 0 分子和 2 在分母中创建有理数时,我也有类似的问题。它应该返回 0/1,但返回的是 0。我相信这两个是相关的,有人知道这里发生了什么吗?
public Rational(int numerator, int denominator) {
int gcd = reduce(numerator, denominator);
num = numerator / gcd;
denom = denominator / gcd;
if(denom == 0)
{
denom = 1;
}
}
private static int reduce(int numerator, int denominator) {
if(denominator == 0) numerator = 1;
return reduce(denominator, numerator % denominator);
}
解决方案
我不完全理解这个任务,也不能说出你问题的合理部分,但堆栈溢出错误是由你的函数减少引起的。问题是这个函数没有端点,因为它是递归的,所以函数调用将在堆栈上建立,直到没有更多可用空间,从而导致堆栈溢出。以下更改将修复堆栈溢出错误。
private static int reduce(int numerator, int denominator) {
if(denominator == 0) { //assuming this is the end point
numerator = 1;
return numerator; //this ends the recursive call
}
return reduce(denominator, numerator % denominator);
}
如果您正在寻找一种找到最大公分母的方法,那么对您的函数进行以下更改应该会起作用。
private static int reduce(int numerator, int denominator) {
if(denominator == 0) {
return numerator;
}
return reduce(denominator, numerator % denominator);
}
推荐阅读
- python - 主题: Matplotlab 工具栏鼠标坐标太小,我看不到
- python - 对于具有特定类型属性的自定义类,类型提示等效于 Dict[str, int]?
- r - 在 R 中获取对角线参考模型估计的问题
- javascript - 在 React 中基于 props 和来自子级的 onClick 更新父级状态
- android - 带有本机反应的whatsapp web
- c# - 使用 msbuild 构建 wcf 失败,但可以直接在 Visual Studio 中构建
- php - 如何为上传 php codeigniter 创建编辑页面
- android - 如何在发布 apk 中使用 minifyEnable?
- git - 合并到默认分支时,合并驱动程序不起作用
- javascript - CSS 网格 - SVG 不会正确调整大小只有 CHROME