【问题标题】:Java passing of parameterJava传递参数
【发布时间】:2013-10-21 15:04:10
【问题描述】:

有人可以详细解释一下为什么这段代码会打印 2 吗?

import java.util.*;

public class TestCode2 {
   public static void main(String[] args) {
      int[][] array = {{1,2,3,4}, {5,6,7,8}};
      System.out.println(m1(array)[0]);
     // System.out.println(m2(array)[1]);
   }

   public static int[] m1(int[][] m) {
      int[] result = new int[2];
      result[0] = m.length;
      result[1] = m[0].length;
      return result;
   }
}

【问题讨论】:

  • 你为什么感到惊讶?你的代码相当于打印array.length,确实是2。
  • 我假设您期望结果为 8。但是,main() 中的 array 的长度为 2。其中的两个元素恰好是长度为 4 的数组。

标签: java variables parameter-passing


【解决方案1】:
    int[][] array = {{1,2,3,4}, {5,6,7,8}};
=>  int[][] array = {arrayOne, arrayTwo};

数组的长度为 2,因为它只是一个包含 2 个子数组(长度均为 4)的二维数组。

所以

   array.length = 2;
   array[0].length = length of arrayOne (i.e: length of {1,2,3,4}) = 4
   array[1].length = length of arrayTwo (i.e: length of {5,6,7,8}) = 4


总结一下:
public static int[] m1(int[][] m) {
      int[] result = new int[2];
      result[0] = m.length; //m.length = 2
      result[1] = m[0].length; //m[0].length = length of {1,2,3,4} = 4
      return result; //{2,4}
   }

然后你只需打印返回的数组的第一个元素,即 2。

【讨论】:

  • 谢谢,我实际上只是混淆了 m.length 和 m[0].length 的含义。愚蠢的错误。昨天刚学了数组和递归
【解决方案2】:

这是一个二维数组,所以: 当你这样做时: int [][] 数组 = {{1,2,3,4},{5,6,7,8}} int a=array.length; \ 即 a=2 这是因为数组将 2 个集合视为其元素意味着 {1,2,3,4} 和 {5,6,7,8} 被视为单个元素 抱歉,我使用的是手机格式错误

【讨论】:

    【解决方案3】:

    m1() 将 2D 数组作为 i/p 并返回一个 (1D) 数组,其中第一个元素作为 i/p 数组的长度,在本例中为 2;因此 2.

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 2016-11-22
      • 2020-05-15
      • 1970-01-01
      • 2018-07-26
      • 2014-08-25
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多