该程序的目的是获得一个分数的两个用户输入,从用户接收一个运算符,然后为另一个分数获得另外两个用户输入。程序必须检查两个分数中使用的数字是否在0-99之间,并且具有非零分母。该程序还必须确保用户输入有效的运算符( - ,+,*,/)。
更新:我现在面临的唯一问题是我的变量都没有被初始化,我不知道如何使输出看起来像这样:
1 1 3
--- + --- = ---
8 4 8
这是我到目前为止的代码,我是编程的初学者,非常感谢任何帮助:
import java.util.Scanner;
public class FractionCalculator {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n1;
int n2;
int d1;
int d2;
int n;
int d;
char o;
int m1,m2;
int tempN1, tempN2;
int lcm, x;
System.out.println("Enter a numerator for fraction 1: ");
n1 = in.nextInt();
System.out.println("Enter a denominator for fraction 1: ");
d1 = in.nextInt();
if (d1 > 0) {
System.out.println();
} else {
System.out.println("Invalid denominator");
System.exit(0);
}
System.out.println("Enter an operator: ");
o = in.next().toCharArray()[0];
System.out.println("Enter a numerator for fraction 2: ");
n2 = in.nextInt();
System.out.println("Enter a denominator for fraction 2: ");
d2 = in.nextInt();
if (d2 > 0) {
System.out.println();
} else {
System.out.println("Invalid denominator");
System.exit(0);
}
switch(o){
case '*':
n = n1 * n2;
d = d1 * d2;
break;
case '/':
n = n1 * d2;
d = n2 * d1;
break;
case '+':
int max=n1>d1?n1:d1;
int min=n1<d1?n1:d1;
for(int i=1;i<=min;i++)
x=max*i;
if (x%min==0)
lcm=x;
tempN1=n1*m1;
tempN2=n2*m2;
m1=lcm/d1;
m2=lcm/d2;
n = tempN1 + tempN2;
d = lcm;
break;
case '-':
n = tempN1 - tempN2;
d = lcm;
break;
default:
System.out.println("Illegal Operator: "+ o);
break; }
}
}
答案 0 :(得分:2)
Java是一种面向对象的语言。在没有Rational
或Fraction
类的情况下,您不应该尝试使用方法来抽象加法,减法,乘法,除法等操作。
Timothy Budd&#34; C ++中的数据结构&#34;有一个很好的例子说明如何正确地做到这一点。它使用Euclid的GCD自动将3/12转换为1/4等
答案 1 :(得分:2)
欢迎使用Java / SO /编程作为一个整体!你选择了一个有趣的问题来学习。
让我们看一下检查/处理运算符。值得注意的是,所有有效的运算符(+, - ,*,/)都是单个字符。所以不要让o
成为一个字符串,而是让它成为一个char
(因为大概是如果用户为他们的运算符输入了多个字符,那就错了 - 让他们只输入他们输入的第一个字符)
一旦我们获得了所有输入,我们就可以在运算符上使用switch
语句来确定它是否有效以及实际执行的操作。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a, b, c, d, e, f;
char o;
System.out.println("Enter a numerator for fraction 1: ");
a = in.nextInt();
System.out.println("Enter a denominator for fraction 1: ");
b = in.nextInt();
if (b > 0) {
System.out.println();
} else {
System.out.println("Invalid denominator");
System.exit(0);
}
System.out.println("Enter an operator: ");
o = in.next().toCharArray()[0]; //Take the first character of the string entered by user
System.out.println("Enter a numerator for fraction 2: ");
c = in.nextInt();
System.out.println("Enter a denominator for fraction 2: ");
d = in.nextInt();
if (d > 0) {
System.out.println();
} else {
System.out.println("Invalid denominator");
System.exit(0);
}
switch(o){
case '*':
//Do multiplication..
break;
case '/':
//Do Division..
break;
case '+':
//Do addition..
break;
case '-':
//Do subtraction..
break;
default:
System.out.println("Illegal Operator: "+ o);
break;
}
}
答案 2 :(得分:0)
这就是逻辑。
Let the numbers be
n1, n2, d1, d2, n, d;
对于加法和减法,找到分母的L.C.M,然后简单地加或减分子。
Here, d=LCM(d1,d2)
Make changes to the numerator while computing LCM
n=n1+n2; or n=n1-n2;
对于乘法,
n=n1*n2;
d=d1*d2;
对于分部,
n=n1*d2;
d=n2*d1;
查找LCM的代码,
int max=a>b?a:b;
int min=a<b?a:b;
int lcm, x;
for(int i=1;i<=min;i++)
{
x=max*i; //finding multiples of the maximum number
if(x%min==0) //Finding the multiple of maximum number which is divisible by the minimum number.
{
lcm=x; //making the 1st multiple of maximum number as lcm, which is divisible by the minimum number
break; //exiting from the loop, as we don’t need anymore checking after getting the LCM
}
}
更改分子......
int m1,m2; //value to be multiplied to the numerators
m1=lcm/d1;
m2=lcm/d2;
int tempN1, tempN2; //So that original values remain intact for displaying the result
tempN1=n1*m1;
tempN2=n2*m2;
添加或减去
n=tempN1+tempN2; //n=tempN1-tempN2; in case of subtraction
d=lcm;