在使用数组进行计算时如何格式化输出?

时间:2017-07-20 17:52:07

标签: java arrays math fractions

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

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

3 个答案:

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

然后您可以在此类上实现方法,以进行打印,比较或操作,例如加号(),减号(),....