相关疑难解决方法(0)

在Java中初始化多维数组

声明多维数组并为其赋值的正确方法是什么?

这就是我所拥有的:

int x = 5;
int y = 5;

String[][] myStringArray = new String [x][y];

myStringArray[0][x] = "a string";
myStringArray[0][y] = "another string";
Run Code Online (Sandbox Code Playgroud)

java multidimensional-array

78
推荐指数
5
解决办法
40万
查看次数

通过反射迭代数组

我正在做一些反思工作并且遇到一个小问题.

我正在尝试将对象打印到某个GUI树,并且以通用方式检测数组有问题.

我建议:

对象instanceof Iterable

会成功,但事实并非如此(显然只适用于Lists和Set以及任何实现它的人.)

因此,如何是我会recognice数组一些Object[],或者long[]还是Long[]......?

谢谢

java reflection

27
推荐指数
2
解决办法
1万
查看次数

是否可以在Java中动态构建多维数组?

假设我们有Java代码:

Object arr = Array.newInstance(Array.class, 5);
Run Code Online (Sandbox Code Playgroud)

那会跑吗?作为进一步的说明,如果我们尝试这样的事情怎么办:

Object arr1 = Array.newInstance(Array.class, 2);
Object arr2 = Array.newInstance(String.class, 4);
Object arr3 = Array.newInstance(String.class, 4);
Array.set(arr1, 0, arr2);
Array.set(arr1, 1, arr3);
Run Code Online (Sandbox Code Playgroud)

那么arr1会是一个2D数组,相当于:

String[2][4] arr1;
Run Code Online (Sandbox Code Playgroud)

怎么样:如果我们在运行时之前不知道这个数组的尺寸怎么办?

编辑:如果这有帮助(我相信它会...)我们试图从表单的字符串解析未知维度的数组

[value1, value2, ...]
Run Code Online (Sandbox Code Playgroud)

要么

[ [value11, value12, ...] [value21, value22, ...] ...]
Run Code Online (Sandbox Code Playgroud)

等等

编辑2:如果有人像我一样愚蠢尝试这个垃圾,这里是一个至少编译和运行的版本.逻辑是否合理完全是另一个问题......

Object arr1 = Array.newInstance(Object.class, x);
Object arr11 = Array.newInstance(Object.class, y);
Object arr12 = Array.newInstance(Object.class, y);
...
Object arr1x = Array.newInstance(Object.class, y);
Array.set(arr1, 0, arr11);
Array.set(arr1, 1, arr12);
...
Array.set(arr1, x-1, arr1x);
Run Code Online (Sandbox Code Playgroud)

等等.它只需要是一个巨大的嵌套对象数组

java arrays dynamic multidimensional-array

24
推荐指数
1
解决办法
2万
查看次数

Java Reflection - 获取数组对象的大小

我想知道是否知道如何使用反射获得数组对象的大小?

我有一个车辆组件包含类型为Car的数组对象.

Vehicles.java

public class Vehicles{

    private Car[] cars;

    // Getter and Setters
}
Run Code Online (Sandbox Code Playgroud)

Car.java

public class Car{

    private String type;
    private String make;
    private String model;

    // Getter and Setters
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何使用Java Reflection 在车辆组件中获得汽车阵列的大小?

我目前有以下内容:

final Field[] fields = vehicles.getClass().getDeclaredFields();

if(fields.length != 0){
    for(Field field : fields){
        if(field.getType().isArray()){
            System.out.println("Array of: " + field.getType());
            System.out.println(" Length: " + Array.getLength(field.getType()));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

java.lang.IllegalArgumentException: Argument is not an array
    at java.lang.reflect.Array.getLength(Native Method) …
Run Code Online (Sandbox Code Playgroud)

java arrays reflection size illegalargumentexception

8
推荐指数
1
解决办法
5万
查看次数

如何在Java中对数组求和

我正在编写一个函数来在Java中对两个数组(不一定大小相等)求和并返回结果.

这是我的尝试:

 public static <T> T[] sumArrays(T[] lhs, T[] rhs)
    {
        T[] out = new T[Math.max(lhs.length, rhs.length)];

        for (int i = 0; i < Math.max(lhs.length, rhs.length); ++i){            
            if (i < Math.min(lhs.length, rhs.length)){
                out[i] = lhs[i] + rhs[i];                
            } else if (i < lhs.length){
                out[i] = lhs[i];
            } else /* if (i < rhs.length)*/{
                out[i] = rhs[i];
            }            
        }
        return out;        
    }
Run Code Online (Sandbox Code Playgroud)

但是我有几个观察结果,尽管有编译错误.

  1. 为什么这个函数不在Java库中,这在极端情况下是巨大的?

  2. 我有动力使用泛型,因为你会在C++中使用模板.

  3. 我担心得到输入数据的深层副本; lhs和``rhs.任何人都可以向我保证吗?C++允许我传递一个常量引用; 我肯定知道.

  4. T[]对于泛型类型,out的实例化似乎是非法的.我错过了什么?

  5. 编译器会优化我的重复Math.max(lhs.length, rhs.length)吗?

  6. 编译器不喜欢lhs[i] + rhs[i].大概是因为它不知道T的类型,但是C++允许你这样做,因为在它知道类型之前它不会尝试编译模板.

  7. 返回时是否会拿出一份深刻的副本?同样,C++编译器也不需要额外的副本. …

java

4
推荐指数
1
解决办法
601
查看次数