我正在编写一个程序,要求用户输入两个分数的分子和分母,并询问使用哪种数学方法:
System.out.printf("Numerator for the first fraction: ");
f1 [0] = input.nextInt();
System.out.printf("Denominator for the first fraction: ");
f1[1] = input.nextInt();
System.out.printf("Numerator for the second fraction: ");
f2[0] = input.nextInt();
System.out.printf("Denominator for the second fraction: ");
f2[1] = input.nextInt();
System.out.printf("Enter the operation (+, -, *, /): ");
op = input.next();
假设我想添加刚输入的分数,程序会将值存储在数组中并将其传递给此方法
public static int[] addFractions(int[] f1, int[] f2) {
int[] result = new int[2];
result[0] = (f1[0] * f2[1]) + (f2[0] * f1[1]);
result[1] = f1[1] * f2[1];
return simplifyFraction(result); //simplifyFraction is just a method that simplifies the numbers using gcd
}
以下是我用来打印答案的内容。
addFractions(f1,f2);
System.out.printf("%d/%d %s %d/%d = %s",f1[0],f1[1],op,f2[0],f2[1],Arrays.toString(addFractions(f1,f2)));
然而,我的回答是这样的:
1/2 + 1/2 = [1, 1]
我做错了什么?我希望我的输出显示为“1/1”。如果分母为1,我可以处理其余逻辑只输出分子,我只是无法正确格式化。
答案 0 :(得分:2)
如下所示
解决方案1
int[] answer = addFractions(f1,f2);
System.out.printf("%d/%d %s %d/%d = %d/%d", f1[0], f1[1], op, f2[0], f2[1], answer[0], answer[1]));
它使用与打印操作数相同的想法。
解决方案2(优于解决方案1)
或者,您可以使用自定义格式化程序。
public String formatFraction(int[] fraction){
String result;
if(fraction[1] == 1){
result = String.valueOf(fraction[0]);
}else{
result = fraction[0] + "/" + fraction[1];
}
return result;
}
并在打印方法上调用它
System.out.printf("%d/%d %s %d/%d = %s", f1[0], f1[1], op, f2[0], f2[1], formatFraction(formatFraction));
打印[
和]
是因为它正在打印一个数组,所以它会打印[ ]
内的,
内的每个元素。
答案 1 :(得分:1)
表示为[1/1]
的另一种解决方案只需替换
Arrays.toString(addFractions(f1,f2))
带
Arrays.toString(addFractions(f1,f2)).replaceAll(", ", "/")
表示[1,1]至[1/1]
答案 2 :(得分:0)
并且答案超出了当前问题的范围:当然可以将分数视为具有两个条目的int数组。
但真正的面向对象的答案在这里:你创建一个代表分数的类。像:
public class Fraction {
private final int numinator;
private final int denominator;
public Fraction(int numinator) {
this(numinator, 1);
}
public Fraction(int numinator, int denominator) {
this.numinator = numinator;
if (denominator == 0) throw new IllegalArgumentException("Cant create fraction with 0 denominator");
this.denominator = denominator;
}
然后您可以在此类上实现方法,以进行打印,比较或操作,例如加号(),减号(),....