int a = 4;
int b = 5;
Shoe shoe = new Shoe (Color.RED, 42, "Leather");
Hat hat = new Hat (17, Color.Black);
Foo foo = foos[a][b];
Zilch pop = bars[shoe][hat]; // no go
public class ArrOfMixedArr
{
public static void main (String args[])
{
Object[] arr = {
new Integer [] {1, 2, 3},
new String [] {"you", "and", "me"},
new Character [] {'a', 'b', 'c'}};
show (arr);
byte b = 7;
short s = 9;
String o [][] = new String[200][1000];
o[b][s] = "foobar";
String foo = o[b][s];
Object[][] ar2 = {
new Integer [] {4, 5, 6},
new String [] {"me", "and", "you"},
new Character [] {'x', 'y', 'z'}};
show (ar2);
// exeptions:
ar2[1][1] = 17; // expected: String
ar2[2][0] = "double you"; // expected: Char
}
public static void show (Object[] arr)
{
for (Object o : arr)
{
if (o instanceof Object[])
show ((Object[]) o);
else
System.out.print (o.toString () + "\t");
}
System.out.println ();
}
}
final static Object tryit[][] = {
{'a',4},
{'b',7},
{'c',8},
};
@Test
public void accessArray( ) {
for (int i = 0; i < tryit.length ; i++) {
char letter = (Character)tryit[i][0];
int value = (Integer)tryit[i][1];
System.out.println(letter + " has value " + value);
}
}
# 1 楼答案
数组中的维度总是从int类型开始。想想看
如果有一个多维的Foo数组,第一个维度是Foo,第二个维度是Foo数组,第三个维度是Foo数组。唯一的变量类型是底部的变量类型
更新问题后编辑:
数组不称为静态数组或基元数组。它们的大小在初始化时是固定的,它们与原语的共同点是,它们是一个构建,在某些情况下会受到特殊的威胁。它们是-与所谓的基元类型不同,基元类型不是基元类型(例如,它们有专门用于自身的运算符,如
* / -
),但同时它们是对象,但不在库中声明叫他们
build in-types
使用贝什·古隆的技巧:
它不是由每个维度的不同数据类型组成的。让我们从尺寸开始:
底层有JPanel,下一个维度有一个JPanel数组。您可以添加更多维度,并且将始终获得额外的(数组…)缠绕着
不能在数组中混合不同的数据类型,如int和char、JPanel和JFrame、int和JButton。仅当您对差异进行抽象,并将JPanel和JFrame的JComponent用作公共父级时,但这对内置类型int、char、boolean等不起作用,因为它们不是对象
但你们不能使用自动装箱,用整数代替整数,用字符代替字符,然后用对象作为公共父类吗?是的,你可以,但是你不再使用原语了,你在乞求麻烦
Dan谈论的是另一件事-在多维数组中使用不同类型的索引:
使用byte或short没有问题,但是不能通过将数组声明为byte或short来限制数组的大小。在大多数情况下,内置整数类型的边界不适合数据类型(想想每年365天),尤其是因为所有类型都可能为负值,所以边界检查是必要的,尽管不能限制在编译时
但现在麻烦来了:
我们可以从一开始就将数组声明为二维:
这样可以很好地工作,并且可以在不进行强制转换的情况下立即访问内部阵列。但只有编译器知道,元素是对象数组——底层类型被抽象掉了,因此我们可以写:
这将完美地编译,但你正在自食其果,并免费获得一个运行时异常
以下是整个来源:
现在解决办法是什么? 如果您的基类型为数组(int、byte、char、String、JPanel等)如果长度相等,则有一个隐藏对象,即数据库行。改为使用类:
如果没有相同大小的不同类型,它们可能是不相关的,不应该放在一个公共容器中
# 2 楼答案
嗯,你可以定义一个数组,一个数组。。。一个对象数组(嵌套的级别与维度的级别一样多),并在底部用不同的类型填充每个数组。。。然后,当您需要提取值时,将其转换为适当的类型。太多的工作是为了有价值的,真的。Java是一种静态类型的语言,不适合这类事情
也许您应该重新考虑一下,为什么需要这样的数据结构
# 3 楼答案
您可以通过使用对象数组来获得效果:
“@Test”是JUnit符号
注意:如果在数组中输入了错误的数据,这种方法在运行时会出现NullPointer和ClassCast异常
# 4 楼答案
经过一些测试,我有了一个简单的解决方案:
# 5 楼答案
你不能
根据定义,多维数组是数组的数组。。。。关于某件事。因此,除了最后一个维度之外,其他维度都不能是数组。至少,按照传统的定义。但如果你说的“多维数组”是指其他东西,你需要告诉我们那是什么
至于“static”,这是编程中的一个重载词,我能想到的每种语言都用它来表示稍微不同的意思。在Java中,
static
表示“属于某个类,而不是该类的实例。”再说一次,如果你这里的“静态”是指其他东西,你需要告诉我们这是什么编辑:正如最初发布的那样,这个问题没有包括“原始”一词。这改变了一点。事实上,我同意,从方便的角度来看,如果Java允许数组通过
char
或甚至一个enum
而不仅仅是int
进行索引,那将是一件好事。但事实并非如此