01/10/2018, 17:24

Làm thế nào để khai báo mảng của một Class không biết trước?

    private static <T> boolean isDistinct(T... array)
    {
        Class t = array.getClass().getComponentType();
        if (t.isArray())
        {
            Class e = t.getComponentType();
----------> e[] insideArray= new e[array.length]; <----------//Unknown class: e[] //Cannot resolve symbol: e
            for(e i: insideArray)
                e[0] = array[0][0];
            return isDistinct(insideArray);
        }
        for (int i = 0; i < array.length - 1; i += 1)
            for (int j = i + 1; j < array.length; j += 1)
                if (array[i].equals(array[j]))
                    return false;
        return true;
    }
*grab popcorn* viết 19:28 ngày 01/10/2018

Thử dùng hàm newInstance trong Java
https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html#newInstance(java.lang.Class,%20int...)
https://docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html

Tao Không Ngu. viết 19:27 ngày 01/10/2018

Hi Trần Hoàn.
Mục đích của bạn là gì ? Việc tổng quát hóa quá mức đôi khi phản tác dụng.

Trần Hoàn viết 19:33 ngày 01/10/2018

Không được bạn à, search và test các kiểu không có ra. Không có cách gì cast từ Object[] thành [I hay ngược lại được, exception hết.

Mục đích của bạn là gì ?

Thực ra mình chỉ cần viết để làm được với int[][][][][]… thôi, mình cũng viết được rồi, nhưng vì muốn tái sử dụng code nên cố viết tổng quát mà không nổi. Chắc mình bỏ cuộc vậy

*grab popcorn* viết 19:40 ngày 01/10/2018

Nếu muốn làm tiếp thì mình nghĩ làm cách này:
Để ý, mảng ko khác gì một cây đâu.
Mảng 1 chiều int[M] thì cây có depth = 1 với N node lá
Mảng int[NxM] thì là cây có depth = 2, với chiều sâu thứ 1 gồm N node, từ N node đó tồn tại M node con.

Nên noz có thể viết một cấu trúc dữ liệu đặc biệt để giả lập mảng như trên.


À mà mình tìm ra đc 2 link đây

stackoverflow.com
Jordan

Is it possible to dynamically build a multi-dimensional array in Java?

java, arrays, dynamic, multidimensional-array
asked by Jordan on 06:40PM - 23 Jun 10

stackoverflow.com
T Locks

How to create a nested array of arbitrary depth in java?

java, arrays, cellular-automata
asked by T Locks on 11:30PM - 04 Jul 13

Trương Tấn Phát viết 19:32 ngày 01/10/2018

Tái sử dụng thì viết vào phương thức rồi gọi lại được gì. Vấn đề gì nhỉ

Phan Bá Hải viết 19:25 ngày 01/10/2018

Anh thử dùng Array.newInstance() xem

stackoverflow.com
Java_Alert

Array initialization using reflection

java, arrays, reflection
asked by Java_Alert on 12:40PM - 20 Jun 13

Class e = t.getComponentType();
Object insideArray= Array.newInstance(e, array.length);
Phan Bá Hải viết 19:27 ngày 01/10/2018

Cái này là xử lý generic, sử dụng một method cho nhiều dạng dữ liệu khác nhau. Giúp hạn chế duplicate code

Trần Hoàn viết 19:34 ngày 01/10/2018
    public static boolean isDistinct(Object array)
    {
        if (!array.getClass().isArray())
            return true;
        int length = Array.getLength(array);
        Object[] headerArray = new Object[length];
        for (int i = 0; i < length; i += 1)
        {
            Object insideElement = Array.get(array, i);
            while (insideElement.getClass().isArray())
                insideElement=Array.get(insideElement,0);
            headerArray[i] = insideElement;
        }
        for(int i = 0; i < length - 1; i += 1)
            for(int j = i+ 1; j < length; j += 1)
            if (headerArray[i].equals(headerArray[j]))
                return false;
        return true;
    }

YES!!! Nhờ link của mấy bạn nó râu ria ra cái get() này

Bài liên quan
0