Java程序计算简单分数

时间:2014-10-06 18:58:46

标签: java html eclipse class lang

该程序的目的是获得一个分数的两个用户输入,从用户接收一个运算符,然后为另一个分数获得另外两个用户输入。程序必须检查两个分数中使用的数字是否在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; }
 }
}

3 个答案:

答案 0 :(得分:2)

Java是一种面向对象的语言。在没有RationalFraction类的情况下,您不应该尝试使用方法来抽象加法,减法,乘法,除法等操作。

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;