Java 二维数组符号和默认访问
Java two dimensional array notation and default access
来自以下代码:
/** Array for internal storage of elements.
@serial internal array storage.
*/
private double[][] A;
/** Row and column dimensions.
@serial row dimension.
@serial column dimension.
*/
private int m, n;
public Matrix times (Matrix B) {
if (B.m != n) {
throw new IllegalArgumentException("Matrix inner dimensions must agree.");
}
Matrix X = new Matrix(m,B.n);
double[][] C = X.getArray();
double[] Bcolj = new double[n];
for (int j = 0; j < B.n; j++) {
for (int k = 0; k < n; k++) {
Bcolj[k] = B.A[k][j];
}
for (int i = 0; i < m; i++) {
double[] Arowi = A[i];
double s = 0;
for (int k = 0; k < n; k++) {
s += Arowi[k]*Bcolj[k];
}
C[i][j] = s;
}
}
return X;
}
double[] Arowi = A[i];
这条线是做什么的?
A是一个二维矩阵,为什么A[i]是允许的?它到底在做什么?
和A[i][0]
一样吗?
这种表示法令人困惑。
也有人可以将该行翻译成 .NET,你会如何使用 double[,] Matrix
?
我知道有一个 Matrix.GetLength() 可以给你指定的维度长度。
但是与那行 Java 代码相比,那将如何翻译?
编辑
我相信我只是通过替换那条线并传入我的矩阵来修复它,将第一行复制到一个新的一维矩阵中并返回它
public double[] ConvertFirstRowOfMultiArrayToOneArray(double[,] p)
{
double[] array = new double[p.Length];
for (int i = 0; i < p.GetLength(0); i++)
{
array[i] = p[0, i];
}
return array;
}
不确定它在 C# (.NET) 中的表现如何,但 java 与二维(多)维数组完全不同。它只有数组的数组(数组的数组......)。所以可以有非矩形数组数组。
double[] Arowi = A[i];
表示声明名为 Arowi
类型 array of doubles
的新变量并将其设置为 A[i]
这是 [= 的第 i 个(从零开始)成员14=].
与A[i][0]
不一样,因为这是A
的第i个成员的第0个成员。
编辑:我没有进行任何代码审查。
What is this line doing?
是将声明为一维数组的Arowi
设置为数组A[i]
假设这种情况:
double[][] A = new double[2][2];
A[0][0] = 1.5;
A[0][1] = 2.5;
A[1][0] = 3.5;
A[1][0] = 4.5;
double[] B = A[0]; // Imagine A[0] as A[i]
/* then value of B is now A[0]
so B is now a unidimensional array containing value:
B[0] == 1.5 == A[0][0]
B[1] == 2.5 == A[0][1] */
A is a two dimensional Matrix, why is A[i] allowed?
因为如您所见,您将一维数组值 (B||Arowi) 设置为包含 A[i] 数组的第二维。
想象一下 A[i] 本身包含另一个数组(二维)。所以我们将这个维度保存到一个新变量中。在这种情况下,它将引用内存地址,而不是值本身,如果我没有混淆的话,例如,如果您在 Arowi||B 中编辑值,它将在原始数组中发生变化。
示例:
B[0] == 1.5 == TRUE
B[0] = 1.75
A[0][0] == 1.5 == FALSE
A[0][0] == 1.75 == TRUE
and what exactly is it doing?
我在示例中解释。
如果我没有混淆的话,应用程序正在执行以下操作:
保存的是A数组(当前数组member/attribute在class(A)中的乘积(加运算,s += Arowi[k]*Bcolj[k]
)的结果,也可能是矩阵class 本身,我无法通过 B 列(参数采用的矩阵对象)的值看到所有代码)。在每个主循环中,它通过 B 中的一个新列,将所有行的值存储在该列中,然后循环整个 A 数组或 class 数组,将结果存储在 C 中,然后将其作为 a 返回矩阵对象。我希望它是可以理解的,我不会感到困惑。
Is that the same thing as A[i][0]?
没有
A[i][0] 设置值。 A[i] 设置一维数组
对不起,我的英语不好,我希望你能理解,并且描述和想法是正确的。
编辑
看例子:
static void Main(string[] args)
{
double[][] A = new double[2][] { new double[2], new double[2] };
A[0][0] = 1.5;
A[0][1] = 2.5;
A[1][0] = 3.5;
A[1][1] = 4.5;
System.Console.WriteLine(A[0][0]);
// Prints 1,5
Console.Read();
double[] B = A[0];
System.Console.WriteLine(B[0]);
// Prints 1,5
System.Console.Read();
System.Console.Read();
}
所以行:double[] Arowi = A[i];
将转换为 double[] Arowi = A[i];
,完全一样。
只有 记得创建一个锯齿状数组 double[][] A
而不是像 double[,] A
这样的数组,因为似乎没有办法用不是锯齿状数组(A[m,n];
是 double[] Arowi = A[i];
不可能像 Java 那样完成)。我现在不能确切地说出为什么。刚刚在我的 VS2013 中试过。
我建议您查看 MSDN 文档:http://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx
我也推荐你这个帖子:Multidimensional Array [][] vs [,]
了解一下
double[] Arowi = A[i];
意味着,最容易将 A
视为双精度数组而不是矩阵。因此,如果您索引 A
,它将 return 一个双精度数组。此外,如果您在某个索引处索引 A
,它将 return 加倍。
希望对您有所帮助!
来自以下代码:
/** Array for internal storage of elements.
@serial internal array storage.
*/
private double[][] A;
/** Row and column dimensions.
@serial row dimension.
@serial column dimension.
*/
private int m, n;
public Matrix times (Matrix B) {
if (B.m != n) {
throw new IllegalArgumentException("Matrix inner dimensions must agree.");
}
Matrix X = new Matrix(m,B.n);
double[][] C = X.getArray();
double[] Bcolj = new double[n];
for (int j = 0; j < B.n; j++) {
for (int k = 0; k < n; k++) {
Bcolj[k] = B.A[k][j];
}
for (int i = 0; i < m; i++) {
double[] Arowi = A[i];
double s = 0;
for (int k = 0; k < n; k++) {
s += Arowi[k]*Bcolj[k];
}
C[i][j] = s;
}
}
return X;
}
double[] Arowi = A[i];
这条线是做什么的?
A是一个二维矩阵,为什么A[i]是允许的?它到底在做什么?
和A[i][0]
一样吗?
这种表示法令人困惑。
也有人可以将该行翻译成 .NET,你会如何使用 double[,] Matrix
?
我知道有一个 Matrix.GetLength() 可以给你指定的维度长度。 但是与那行 Java 代码相比,那将如何翻译?
编辑 我相信我只是通过替换那条线并传入我的矩阵来修复它,将第一行复制到一个新的一维矩阵中并返回它
public double[] ConvertFirstRowOfMultiArrayToOneArray(double[,] p)
{
double[] array = new double[p.Length];
for (int i = 0; i < p.GetLength(0); i++)
{
array[i] = p[0, i];
}
return array;
}
不确定它在 C# (.NET) 中的表现如何,但 java 与二维(多)维数组完全不同。它只有数组的数组(数组的数组......)。所以可以有非矩形数组数组。
double[] Arowi = A[i];
表示声明名为 Arowi
类型 array of doubles
的新变量并将其设置为 A[i]
这是 [= 的第 i 个(从零开始)成员14=].
与A[i][0]
不一样,因为这是A
的第i个成员的第0个成员。
编辑:我没有进行任何代码审查。
What is this line doing?
是将声明为一维数组的Arowi
设置为数组A[i]
假设这种情况:
double[][] A = new double[2][2];
A[0][0] = 1.5;
A[0][1] = 2.5;
A[1][0] = 3.5;
A[1][0] = 4.5;
double[] B = A[0]; // Imagine A[0] as A[i]
/* then value of B is now A[0]
so B is now a unidimensional array containing value:
B[0] == 1.5 == A[0][0]
B[1] == 2.5 == A[0][1] */
A is a two dimensional Matrix, why is A[i] allowed?
因为如您所见,您将一维数组值 (B||Arowi) 设置为包含 A[i] 数组的第二维。
想象一下 A[i] 本身包含另一个数组(二维)。所以我们将这个维度保存到一个新变量中。在这种情况下,它将引用内存地址,而不是值本身,如果我没有混淆的话,例如,如果您在 Arowi||B 中编辑值,它将在原始数组中发生变化。
示例:
B[0] == 1.5 == TRUE
B[0] = 1.75
A[0][0] == 1.5 == FALSE
A[0][0] == 1.75 == TRUE
and what exactly is it doing?
我在示例中解释。
如果我没有混淆的话,应用程序正在执行以下操作:
保存的是A数组(当前数组member/attribute在class(A)中的乘积(加运算,s += Arowi[k]*Bcolj[k]
)的结果,也可能是矩阵class 本身,我无法通过 B 列(参数采用的矩阵对象)的值看到所有代码)。在每个主循环中,它通过 B 中的一个新列,将所有行的值存储在该列中,然后循环整个 A 数组或 class 数组,将结果存储在 C 中,然后将其作为 a 返回矩阵对象。我希望它是可以理解的,我不会感到困惑。
Is that the same thing as A[i][0]?
没有
A[i][0] 设置值。 A[i] 设置一维数组
对不起,我的英语不好,我希望你能理解,并且描述和想法是正确的。
编辑
看例子:
static void Main(string[] args)
{
double[][] A = new double[2][] { new double[2], new double[2] };
A[0][0] = 1.5;
A[0][1] = 2.5;
A[1][0] = 3.5;
A[1][1] = 4.5;
System.Console.WriteLine(A[0][0]);
// Prints 1,5
Console.Read();
double[] B = A[0];
System.Console.WriteLine(B[0]);
// Prints 1,5
System.Console.Read();
System.Console.Read();
}
所以行:double[] Arowi = A[i];
将转换为 double[] Arowi = A[i];
,完全一样。
只有 记得创建一个锯齿状数组 double[][] A
而不是像 double[,] A
这样的数组,因为似乎没有办法用不是锯齿状数组(A[m,n];
是 double[] Arowi = A[i];
不可能像 Java 那样完成)。我现在不能确切地说出为什么。刚刚在我的 VS2013 中试过。
我建议您查看 MSDN 文档:http://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx
我也推荐你这个帖子:Multidimensional Array [][] vs [,]
了解一下
double[] Arowi = A[i];
意味着,最容易将 A
视为双精度数组而不是矩阵。因此,如果您索引 A
,它将 return 一个双精度数组。此外,如果您在某个索引处索引 A
,它将 return 加倍。
希望对您有所帮助!