为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中递归地将数组中的对象与另一个对象相乘

在Java中递归地将数组中的对象与另一个对象相乘

MM们 2022-12-21 16:44:39
你好,我正在学习 Java,在完成了一些学习递归的任务后,我给自己做了一些练习来学习更多,但现在我正在努力学习一些......所以主要的问题是,当数组中的元素是对象时,我不知道如何递归地乘以数组中的每个元素(也许最后是否有对象没有区别)。所以我给自己的练习是:检查 1 / 3 是否在给定的数组中。如果是,则将该数组中的所有内容乘以 2 / 1。这是分数: private int numerator;      // Zaehler private int denominator;    // Nenner        public Fraction ( int num, int denom )        {            if ( denom != 0 )            {                if ( denom < 0 )                {                    numerator = -num;                    denominator = -denom;                }                else                {                    numerator = num;                    denominator = denom;                }                reduce();            }            else            {                // error: division by zero                throw new IllegalArgumentException();            }        }        public Fraction()        {            numerator = 0;            denominator = 1;        }        public Fraction( int num )        {            numerator = num;            denominator = 1;        }所以我通过 for 循环完成了它:public static Fraction[] mulWithFor(Fraction[] arr)        {            for (int i = 0; i<arr.length; i++)            {                arr[i] = arr[i].multiply(new Fraction(2,1));            }            return arr;        }但这不是我的主要目标,我想递归地做,所以这是我的方法:public static Fraction[] mulAus(Fraction[] arr, int i)        {            if (i>= 0 && i<arr.length)            {                rekurMul(arr,i);                //return mulAus(rekurMul(arr,i-1));            }            return arr;        }        public static Fraction rekurMul(Fraction[] arr, int i)        {            if (i>= 0 && i<arr.length)            {                return arr[i].multiply(new Fraction(2,1));                return arr[i].multiply(new Fraction(2, 1)); // Does Not Work!!!            }            throw new IndexOutOfBoundsException();        }也许有人可以帮助我!感谢您的关注。
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

假设您有一种multiplyBy(Fraction f)方法可以在您的Fraction课堂上正常工作。此外,迭代进行会更好(更具可读性,节省更多时间和空间复杂性)。为了这个例子,我会这样做:


首先定义:


private static boolean oneThirdIsPresent(Fraction[] arr){

    for (int i = 0; i < arr.length; i++) {

        if(arr[i].numerator == 1 && arr[i].denominator == 3) {

            return true;

        }

    }

    return false;

}


private static void recursivelyMultBy2(Fraction[] arr, int index){

    if(index == arr.length){

        return;

    }

    arr[index] = arr[index].multiplyBy(new Fraction(2));

    recursivelyMultBy2(arr, index+1);

}

为了最终解决:


public static void multBy2IfOneThirdIsPresent(Fraction[] arr){

    if(oneThirdIsPresent(arr)){

        recursivelyMultBy2(arr, 0);

    }else{

        return;

    }

}


查看完整回答
反对 回复 2022-12-21
?
萧十郎

TA贡献1815条经验 获得超13个赞

这是递归乘法部分的一个简单示例:


public static void main(String[] args)

{

    Fraction[] fractions = new Fraction[] {new Fraction(1,2), new Fraction(2,3), new Fraction(3,1)};


    System.out.println("Fractions:");

    for(Fraction f: fractions)

    {

        System.out.println(f);

    }


    System.out.println("Multiplying array by 2...");

    Fraction.mulAus(fractions, new Fraction(2, 1));

    for(Fraction f: fractions)

    {

        System.out.println(f);

    }

}

Modified Fraction Class(乘法代码在底部):


public class Fraction

{


        private int numerator;      // Zaehler

        private int denominator;    // Nenner


        public Fraction(int num, int denom)

        {

            if (denom != 0)

            {

                if (denom < 0)

                {

                    numerator = -num;

                    denominator = -denom;

                }

                else

                {

                    numerator = num;

                    denominator = denom;

                }

                reduce();

            }

            else

            {

                // error: division by zero

                //throw new IllegalArgumentException();

            }

        }


        private void reduce()

        {

            // ... 

        }


        public Fraction()

        {

            numerator = 0;

            denominator = 1;

        }


        public Fraction(int num)

        {

            numerator = num;

            denominator = 1;

        }


        public String toString()

        {

            return numerator + " / " + denominator;

        }


        public void MultiplyBy(Fraction F)

        {

            if (F != null)

            {

                numerator = numerator * F.numerator;

                denominator = denominator * F.denominator;

                reduce();

            }

        }


        public static void mulAus(Fraction[] arr, Fraction F)

        {

            if(arr != null && F != null)

            {

                rekurMul(arr, 0, F);

            }

        }


        private static void rekurMul(Fraction[] arr, int i, Fraction F)

        {

            arr[i].MultiplyBy(F);

            if (i < (arr.length - 1))

            {

                rekurMul(arr, ++i, F);

            }

        }


}

输出:

//img1.sycdn.imooc.com//63a2c7a6000185ce02730287.jpg

查看完整回答
反对 回复 2022-12-21
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号