有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAreverse()不处理jython中多维数组的一行?

我最近和Jython在一起玩,我注意到了一些奇怪的事情。我肯定我遗漏了一些明显的东西,但有人能解释一下原因吗。reverse()对多维数组的一行不起作用

正在使用PythonInterpreter从Java传入输入。set()

当我执行以下python代码时

#Integer[][] input
print(input[0])
input[0].reverse()
print(input[0])

我得到以下输出,值没有反转

array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [0, 1, 1, 1, 1])

但是如果我在一维数组上执行reverse()

#Integer[] input;
print(input)
input.reverse()
print(input)

结果如我所料

array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [1, 1, 1, 1, 0])

同样,如果我将输入[0]复制到它自己的变量中,然后反向,它也会按预期工作

#Integer[][] input
print(input[0])
tmp = input[0]
tmp.reverse()
input[0] = tmp
print(input[0])

我也得到了预期的结果

array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [1, 1, 1, 1, 0])

我也从…得到了预期的结果

#Integer[][] input
print(input[0])
input[0] = input[::-1]
print(input[0])

---编辑---

看起来也是这样。insert()在这种情况下也无法执行

#Integer[][] input
print(input[0])
input[0].insert(0,123)
print(input[0])

生产

array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [0, 1, 1, 1, 1])

同样的道理也适用于。append()和。pop()。我觉得这适用于很多(如果不是全部的话)列表函数


共 (2) 个答案

  1. # 1 楼答案

    我的猜测是,当您使用Integer[]输入时,您创建了一个不可变数据表(可变)。因此,虽然可以修改列表,但不能修改该列表中包含的对象。 因此,所有需要修改数组(append、pop、reverse)的方法都无法工作

  2. # 2 楼答案

    访问input[0](以及任何其他索引)可能会创建一个带有数据副本的一维数组,而不是您所期望的数据视图