java - 在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();
}
也许有人可以帮助我!感谢您的关注。
好的感谢@Chaï Sarfati 以及其他试图帮助我的人。我现在知道如何在一个数组中乘以递归的东西!我使用了@Chaï Sarfati 的方法,但为他的“oneThirdIsPresent”写了一个替代方法,这也是一种递归方法:所以现在我的工作代码看起来像这样
public static Fraction[] mulAus(Fraction[] arr)
{
if(contains(arr,arr.length-1,new Fraction(1,3)))
{
rekurMul(arr,0);
return arr;
}
throw new IllegalArgumentException("1/3 does not exist in the Input-Array");
}
public static void rekurMul(Fraction[] arr, int i)
{
if(i == arr.length)
{
return ;
}
arr[i] = arr[i].multiply(new Fraction(2,1));
rekurMul(arr,i+1);
}
检查给定数组中是否存在 1 / 3 的方法。
public static boolean contains(Fraction[] arr, int i, Fraction x)
{
if (i>= 0 && i < arr.length)
{
if (arr[i].equals(x))
{ return true;}
else
{ return contains(arr, i-1,x); }
}
return false;
}
我希望其他人可以从代码中学习。也许有更好的解决方案,但我刚刚开始编程,所以我现在不知道它们。再见
解决方案
假设您有一个可以在您的班级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;
}
}
推荐阅读
- reactjs - 在组件之间交换数据
- json - 遍历 XML 节点,然后检查是否有匹配的 json 值,然后选择该值
- c++ - Boost Spirit x3 解析为带有跳过成员的结构(如果它为空)
- javascript - 当用户在javascript中退出全屏时,如何取消选中复选框?
- java - 将char转换为int java的问题
- xml - 使用 Typescript 和 xml2js 解析 XML
- javascript - 单击时访问本地存储中的键值未按计划工作
- sql-server - 异步 AO 复制中的 SQL 数据库 - 备份后日志文件不保存
- swift - Xcode 中的上下文帮助未显示
- mysql - 单击 URL 后停止显示行。PHP MYSQLI