1

我想要一个带有一行字符串和另一行带有 int 的 2D 矩阵。那可能吗?还是我必须将 int 保存为字符串,然后再将它们转换为 int?

4

6 回答 6

7

而是使用一个对象。

class MyEntry { 
    String foo;
    int number;
}
MyEntry[] array = new MyEntry[10];

但如果必须,您可以使用两种类型 - 仅通过Object超类型。

Object[][] arr = new Object[2][10];

arr[0][0] = "Foo";
arr[1][0] = new Integer(50);
于 2013-06-25T11:53:21.243 回答
3

不,这是不可能的。数组对象只能有一个数据类型。您可以创建一个同时具有intandString作为属性的类并使用它。Object[][]即使有这样做的诱惑,也不要使用,这是一种邪恶的解决方法,黑客失败的次数比成功的次数多。如果Object是一种合理的技术,那么他们就不会为 Collection 引入泛型!

于 2013-06-25T11:53:14.733 回答
1

您可以创建 Objects 2D 数组并在那里放置字符串和整数,但我不确定在数组中混合类型是否是个好主意。您可能应该更多地描述您的问题,以便我们找出更好的方法。

于 2013-06-25T11:53:39.110 回答
0

是的。如果您声明为对象矩阵,那么您可以存储字符串和整数(不是 int),困难在于正确检索它们:)

于 2013-06-25T11:54:32.503 回答
0

如果你在 x 和 y 是数字Object的地方做一个 2D 数组,你可以做到这一点。Object[][] myArray = new Object[x][y]

您所要做的就是在使用对象之前将它们转换为预期的类型。比如说(String) myArray[0][3]

如果您确定特定位置的对象将是什么类型,您应该这样做。

但是,以这种方式做事通常不是一个好主意。更好的解决方案是定义您自己的数据结构类,该类具有 String 数组和 int 数组作为成员变量。如:

public class myData {
    String[] theStringArray;
    int[] theIntArray;

    public myData(String[] sArraySize, int[] iArraySize) {
        this.theStringArray = new String[sArraySize];
        this.theIntArray = new int[iArraySize);
    }

    ...
    // Additional getters / setters etc... 
    ...
}
于 2013-06-25T11:54:44.203 回答
0

您可以创建一个 Object 类型的数组并将任何非原始 Object 存储在其中。当您检索它们时,您需要确保检查它们的类。

if(objArray[0] instanceof String) {
    // do string stuff
} else if(objArray[0] instanceof Integer) {
    // do integer stuff
}

等等

我认为您最好创建一个新类,该类可以存储您想要的类型的对象,然后使用 getter 和 setter 检索它们。它更安全,更稳定。

于 2013-06-25T11:57:31.383 回答