Fraction multiplier custom method in Java

Viewed 118

I'm using JB IntelliJ IDEA and trying to create a program which contains class Fraction and method multiplie, multiplies two fractions and should return and print somethig like that: "Multiplie result: int / int", but it prints:"Multiplie result: [I@7ea987ac".

Here is my code:

Main.java:

package com.company;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
     Scanner scan = new Scanner(System.in);
     System.out.print("Numerator1 = ");
     int num1 = scan.nextInt();
     System.out.print("Denomerator1 = ");
     int denom1 = scan.nextInt();
     System.out.print("Numerator2 = ");
     int num2 = scan.nextInt();
     System.out.print("Denomerator2 = ");
     int denom2 = scan.nextInt();
    System.out.print("Multiplie result: " + Fraction.multiplie(num1,denom1,num2,denom1));
    }
}

and Fraction.java:

package com.company;

public class Fraction {
    static int numerator;
    static int denominator = 1;
    static int numerator2;
    static int denominator2;
    static int numeratorsmultiplie;
    static int denominatorsmultiplie;
    static int[]multiplieresult = new int[2];
    public Fraction(int numerator, int denominator) {
        if (denominator == 0) {
            System.out.println("Denominator can't be zero. Choose another one.");
            return;
        }
        this.numerator = numerator * (denominator < 0 ? -1 : 1);
        this.denominator = Math.abs(denominator);
        normalization();
    }
    public int getNumerator() {
        return numerator;
    }
    public int getDenominator() {
        return denominator;
    }
    public void setNumerator(int numerator) {
        this.numerator = numerator;
    }
    public void setDenominator(int denominator) {
        if (denominator == 0) {
            System.out.println("Denominator can't be zero. Choose another one.");
            return;
        }
        if (denominator < 0) {
            this.numerator *= -1;
        }
    }
    private int gcd(int numerator, int denominator) {
        while (numerator != 0 && denominator != 0) {
            if (numerator > denominator) {
                numerator %= denominator;
            } else {
                denominator %= numerator;
            }
        }
        return numerator + denominator;
    }
    private void normalization() {
        int n = gcd(Math.abs(numerator), Math.abs(denominator));
        numerator /= n;
        denominator /= n;
    }
    public static int[] multiplie(int numerator, int denominator, int numerator2, int denominator2) {
        numeratorsmultiplie = numerator * numerator2;
        denominatorsmultiplie = denominator * denominator2;
        final int[] ret = {numeratorsmultiplie, denominatorsmultiplie};
        return ret;
    }
}
2 Answers

Change

System.out.print("Multiplie result: " + Fraction.multiplie(num1,denom1,num2,denom1))

to

System.out.print("Multiplie result: " + Arrays.toString(Fraction.multiplie(num1,denom1,num2,denom1)));

since your multiplie method returns an int [].

Remove all variables in "Fraction.java" excluding:

private static int numerator; private static int denominator;

and change multiplie method to:

static String multiply(int numerator, int denominator, int numerator2, int denominator2) { int numeratorsmultiply = numerator * numerator2; int denominatorsmultiply = denominator * denominator2; String numeratorsmultiplystr = Integer.toString(numeratorsmultiply); String denominatorsmultiplystr = Integer.toString(denominatorsmultiply); return numeratorsmultiplystr + " / " + denominatorsmultiplystr; }

Also change "Main.java" print line to:

System.out.print("Multiplie result: " + Fraction.multiply(num1, denom1, num2, denom2));

Related