使用数组计算时如何格式化我的输出?
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()、....
我正在编写一个程序,要求用户输入两个分数的分子和分母,并询问使用哪种数学方法,如下所示:
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()、....