java - java方法中的数组,执行了什么?

标签 java arrays methods

我已经在这个java问题上苦苦挣扎了好几天了,现在我不得不放弃了。有人告诉我答案应该是 5 5 3 3,但我无论如何都不知道如何才能得到这个结果。

给出以下 java 方法:

public int[] methodName(int[] nums)
{
     int largestOdd=0;
     for(int i=nums.length-2;i>=0;i--)
     {
          if (nums[i+1] % 2 != 0 && nums[i+1] > largestOdd)
               largestOdd = nums[i+1];

          if (nums[i] == 0)
               nums[i] = largestOdd;
     }
     return(nums);
}

执行以下Java语句时打印什么?

int[] nums = {0,5,0,3};
nums = methodName(nums)
for (int i = 0; i<nums.length;i++)
    System.out.print(nums[i] + "");
System.out.println();

首先它会开始打印“5”,这对我来说没有任何意义。在我看来,它应该是“3”,因为 nums[2+1] = 3(最后一个索引元素)

其次,当方法中的循环只会循环 3 次直到达到 -1 时,为什么它会打印四个数字?

如果有人能以易于理解的方式解释如何获得结果,我会非常高兴。

提前致谢

最佳答案

methodName 向后运行数组,检查每对数字。在这种情况下,检查的第一对将是 (0,3)。

当它在对上运行时,methodName 会跟踪看到的最大奇数(它会查看每对的第二个数字)。

只要第一个数字为零,它就会将其设置为迄今为止看到的最大奇数。

所以在这种情况下,它将:

  1. 查看 (0,3)。
  2. 3 是奇数吗?是的。这是迄今为止见过的最大奇数吗?是的。因此,请跟踪 3。
  3. 0 是零吗?是的。因此将其设置为 3。现在数组为 {0, 5, 3, 3}。
  4. 将索引后移 1,查看 (5, 3)。
  5. 3 是奇数吗?是的。这是迄今为止见过的最大奇数吗?没有。
  6. 5 是零吗?没有。
  7. 将索引向后移动 1,然后查看 (0, 5)。
  8. 5 是奇数吗?是的。这是迄今为止见过的最大奇数吗?是的。所以记住 5。
  9. 0 是零吗?是的。因此将其设置为 5。现在数组为 {5, 5, 3, 3}。
  10. 我们已经位于数组的开头,因此无法再返回。
  11. 返回main方法,并打印数组的内容。

关于java - java方法中的数组,执行了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19946585/

相关文章:

arrays - 复制变量时的数组地址

java - 如何使用所有参数都为强制性的构建器模式?

javascript - 使用 for 循环定位数组的元素而不是其位置时遇到问题

java - client_secrets.json 文件必须放在 Android Studio 项目文件夹树中的什么位置?

java - 如何有效地用常量值初始化Java中的数组

线程中的C++方法。传递之间的区别:对象、对象的地址、对象的 std::ref

ruby - Ruby 中的方法访问

java - 枚举上的基本方法调用

java - JDBC 结果集行为异常

java - 用零初始化 ArrayList<Integer> 的值 - Java