关于二维数组的创建,我这样初始化一个表:
private String [][] table_of_classifiers = null;
不是真的。这是一个变量的声明和初始化,它可以指向一个“二维数组”、“表”或更确切地说是一个字符串的“数组数组”。 p>
除非您处理变量可以/将为 null 的事实,否则将其初始化为 null 通常是一个坏主意,因为您需要做额外的工作来检查 null。例子:
String[][] a;
// ...
String b = a[0][0];
这不会编译,除非a 同时没有被初始化。这是一件好事,因为您可以避免潜在的错误。
String[][] a = null;
// ...
String b = a[0][0];
但是这将编译,如果您忘记实际为变量分配一个真正的数组,程序将“崩溃”并出现“空指针异常”,或者您需要添加额外的代码/工作来检查null .
我这样填充它的内容:
String [][] table_of_classifiers = {
{"x1","x","x","x","x"},
{"x2","x","x","x","x"},
{"x3","x","x","x","x"},
{"x4","x","x","x","x"},
{"x5","x","x","x","x"},
{"x6","x","x","x","x"},
};
你没有在这里“填充”任何东西。对于要填充的东西,它必须首先存在,但你还没有创造任何东西。
在这里您要声明第二个同名变量,这只有在您与第一个变量处于不同范围内时才有可能,在这种情况下,您将“隐藏”(“隐藏”)原始变量,如果它最初可以从这个新范围访问。
但是你可以猜到第二个表会覆盖(本地)第一个表
一,那当然不是我想做的。我做错了什么?
哪个“第一”表?直到现在还没有第一个表,只有第一个变量。其他人已经向您展示了如何将“表”分配给原始变量,而不是在行首使用“声明”String[][]。
否则就不可能说出你“做错了什么”,因为你还没有真正解释你想要做什么。
请注意,表格的维度从一开始就未知。
不是吗?那么你如何/为什么使用数组文字呢?字面量数组用于创建具有固定“预填充”的固定大小的数组。
“开始”到底是什么意思?在编程时(编译时)或程序启动时(运行时)不知道大小吗?
如果您在运行时获得数组的大小,您可以使用new 创建一个普通数组:
int a = ...;
int b = ...; // Get the sizes from somewhere, e.g, user input
String[][] table_of_classifiers = new String[a][b];
// Now you have an "empty" table
如果大小在运行时“变化”,那么 - 取决于您实际尝试执行的操作 - 那么数组是错误的工具,您应该改用 List 实现,例如 ArrayList。
关于“eval”,正如其他人所说,Java 是一种编译语言,使得“eval”基本上是不可能的。是“反射”或使用 Class 类型来实现您所暗示的,但您确实需要更广泛地解释您想要实现的目标,那么它可能会在这里为您提供帮助。
但是反射和 CLass 类型是一件复杂的事情,而且考虑到您显然在为最基本的 Java 概念苦苦挣扎,在您能够做您想做的事情之前,您还有很长的路要走。