使用数组计算时如何格式化我的输出?

How do I format my output when computing with arrays?

我正在编写一个程序,要求用户输入两个分数的分子和分母,并询问使用哪种数学方法,如下所示:

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,我可以处理其余的逻辑以仅输出分子,我只是无法正确格式化它。

如下操作

解决方案 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]));

它使用与您用于打印操作数相同的想法。

方案二(优于方案一)

或者,您可以使用自定义格式化程序。

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]的另一种解决方案

只是替换

Arrays.toString(addFractions(f1,f2))

Arrays.toString(addFractions(f1,f2)).replaceAll(", ", "/")

代表[1, 1]到[1/1]

一个超出当前问题范围的答案:当然可以将分数视为具有两个条目的 int 数组。

但是 真实 面向对象的答案在这里:您创建一个 class 来表示分数。喜欢:

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;
  }

然后您可以在此 class 上实施 方法 以进行打印、比较或操作,例如 plus()、minus()、....