猿问

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

你好,我正在学习 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();

        }

也许有人可以帮助我!感谢您的关注。


MM们
浏览 121回答 2
2回答

慕的地6264312

假设您有一种multiplyBy(Fraction f)方法可以在您的Fraction课堂上正常工作。此外,迭代进行会更好(更具可读性,节省更多时间和空间复杂性)。为了这个例子,我会这样做:首先定义:private static boolean oneThirdIsPresent(Fraction[] arr){&nbsp; &nbsp; for (int i = 0; i < arr.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; if(arr[i].numerator == 1 && arr[i].denominator == 3) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return false;}private static void recursivelyMultBy2(Fraction[] arr, int index){&nbsp; &nbsp; if(index == arr.length){&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; }&nbsp; &nbsp; arr[index] = arr[index].multiplyBy(new Fraction(2));&nbsp; &nbsp; recursivelyMultBy2(arr, index+1);}为了最终解决:public static void multBy2IfOneThirdIsPresent(Fraction[] arr){&nbsp; &nbsp; if(oneThirdIsPresent(arr)){&nbsp; &nbsp; &nbsp; &nbsp; recursivelyMultBy2(arr, 0);&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; }}

萧十郎

这是递归乘法部分的一个简单示例:public static void main(String[] args){&nbsp; &nbsp; Fraction[] fractions = new Fraction[] {new Fraction(1,2), new Fraction(2,3), new Fraction(3,1)};&nbsp; &nbsp; System.out.println("Fractions:");&nbsp; &nbsp; for(Fraction f: fractions)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(f);&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println("Multiplying array by 2...");&nbsp; &nbsp; Fraction.mulAus(fractions, new Fraction(2, 1));&nbsp; &nbsp; for(Fraction f: fractions)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(f);&nbsp; &nbsp; }}Modified Fraction Class(乘法代码在底部):public class Fraction{&nbsp; &nbsp; &nbsp; &nbsp; private int numerator;&nbsp; &nbsp; &nbsp; // Zaehler&nbsp; &nbsp; &nbsp; &nbsp; private int denominator;&nbsp; &nbsp; // Nenner&nbsp; &nbsp; &nbsp; &nbsp; public Fraction(int num, int denom)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (denom != 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (denom < 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator = -num;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator = -denom;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator = num;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator = denom;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reduce();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // error: division by zero&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //throw new IllegalArgumentException();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; private void reduce()&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // ...&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public Fraction()&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator = 1;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public Fraction(int num)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator = num;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator = 1;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public String toString()&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return numerator + " / " + denominator;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public void MultiplyBy(Fraction F)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (F != null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator = numerator * F.numerator;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator = denominator * F.denominator;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reduce();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public static void mulAus(Fraction[] arr, Fraction F)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(arr != null && F != null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rekurMul(arr, 0, F);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; private static void rekurMul(Fraction[] arr, int i, Fraction F)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr[i].MultiplyBy(F);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i < (arr.length - 1))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rekurMul(arr, ++i, F);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }}输出:
随时随地看视频慕课网APP

相关分类

Java
我要回答