java - 分数程序 - Java
问题描述
我目前正在开发一个程序,该程序允许用户选择四种方法之一,并在 5 个预定义分数的列表中对其进行测试。第一种方法将分数转换为字符串,第二种方法减少分数,第三种方法将分数输出为带分数,第四种方法以十进制形式表示分数。
我的一切工作都有几个小缺陷:
- 如果用户在第一种方法之前选择第二种方法,第一种方法将以简化形式而不是其原始形式打印出来。
- 当混合数字为负数时,它将在混合数字中的每个数字之前打印一个“-”符号(示例:-5 5/6 打印为 -5 -5/-6)
下面是我的代码:
public class TestFractionBrandonBischoff
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
// Create fraction array
Fraction [] fractionArray;
fractionArray = new Fraction[5];
for (int i=0; i<fractionArray.length; i++)
fractionArray[i] = new Fraction();
fractionArray[0].numerator = -125;
fractionArray[0].denominator = 30;
fractionArray[1].numerator = 100;
fractionArray[1].denominator = -4;
fractionArray[2].numerator = 23;
fractionArray[2].denominator = 50;
fractionArray[3].numerator = 60;
fractionArray[3].denominator = 40;
fractionArray[4].numerator = 30;
fractionArray[4].denominator = 390;
//Prompt user to select a method to test
System.out.println("Select which method you would like to perform: ");
System.out.println("1. Test the toString() method");
System.out.println("2. Test the reduce() method");
System.out.println("3. Test the toMixed() method");
System.out.println("4. Test the getDecimal() method");
System.out.println("5. Quit");
Scanner method;
method = new Scanner(System.in);
int methodChoice;
methodChoice = method.nextInt();
while(methodChoice != 5){
//Use user input to call specific method
if (methodChoice == 1){
System.out.println(fractionArray[0].toString());
System.out.println(fractionArray[1].toString());
System.out.println(fractionArray[2].toString());
System.out.println(fractionArray[3].toString());
System.out.println(fractionArray[4].toString());
}
else if(methodChoice == 2){
fractionArray[0].reduce();
fractionArray[1].reduce();
fractionArray[2].reduce();
fractionArray[3].reduce();
fractionArray[4].reduce();
System.out.println(fractionArray[0].toString());
System.out.println(fractionArray[1].toString());
System.out.println(fractionArray[2].toString());
System.out.println(fractionArray[3].toString());
System.out.println(fractionArray[4].toString());
}
else if (methodChoice == 3){
System.out.println(fractionArray[0].toMixed());
System.out.println(fractionArray[1].toMixed());
System.out.println(fractionArray[2].toMixed());
System.out.println(fractionArray[3].toMixed());
System.out.println(fractionArray[4].toMixed());
}
else if (methodChoice == 4){
System.out.println(fractionArray[0].getDecimal());
System.out.println(fractionArray[1].getDecimal());
System.out.println(fractionArray[2].getDecimal());
System.out.println(fractionArray[3].getDecimal());
System.out.println(fractionArray[4].getDecimal());
}
else
//Prompt user to select a method to test
System.out.println("Select which method you would like to perform: ");
System.out.println("1. Test the toString() method");
System.out.println("2. Test the reduce() method");
System.out.println("3. Test the toMixed() method");
System.out.println("4. Test the getDecimal() method");
System.out.println("5. Quit");
methodChoice = method.nextInt();
}
}
}
class Fraction
{
int numerator;
int denominator;
@Override
public String toString(){
return numerator + "/" + denominator;
}
//Method to return decimal form of fraction
public double getDecimal(){
double result;
result = 1.0 * numerator/denominator;
return result;
}
//Method to reduce fraction to simplest form
public void reduce() {
int n = numerator;
int d = denominator;
while (d != 0) {
int t = d;
d = n % d;
n = t;
}
int gcd = n;
numerator /= gcd;
denominator /= gcd;
}
//Method to return mixed number form of fraction
public String toMixed(){
String mixedNum;
int wholeNum;
wholeNum = Math.floorDiv(numerator,denominator);
if (wholeNum == 0){
mixedNum = numerator + "/" + denominator;
}
else if (numerator % denominator == 0)
mixedNum = wholeNum + "";
else
mixedNum = wholeNum + " " +
(numerator - wholeNum*denominator) + "/" + denominator;
return mixedNum;
}
如果您能帮助我解决这两个小错误,将不胜感激。先感谢您!
解决方案
错误一:很可能是因为你在reduce中修改了实例变量;我建议使用局部变量。
错误 2:您正在打印整数和分数的单个字符串。所以基本上你得到整数,这将是负数,然后你对分数执行单独的操作,这也是负数。然后你打印这两个底片;我建议事先确定分数的符号,然后对所有内容进行绝对值并在函数末尾打印符号。
推荐阅读
- spring - Spring boot:在测试中从 application.properties 引用 pom 属性
- reactjs - MaterialTable 导出选项未显示?
- sequelize.js - JPA 的 @OrderColumn 的 Sequelize 等价物是什么
- python - Django:在一个页面上提交两个表单并在第二个表单中使用来自第一个表单的数据
- postgresql - 将带有动态值的 Postgers left join 查询结果展平为一行
- c# - 如何将 Target Framework 从 .NET 5.0 降级到 .NET Framework 4.7.2?
- java - JavaFX 项目出错:ImageIO 和 BufferedImage 不可见
- java - IntelliJ IDEA 在项目中禁用编辑/格式化 .svg 图像
- excel - 如何使用 VBA 打开多个受密码保护的 excel 文件并将受密码保护的文件中的数据复制并粘贴到另一个工作表中
- mysql - 插入……在重复的密钥更新中……。有条件?