繁体   English   中英

在Java中打印N维数组

[英]print N-Dimensional array in java

我想要一种通用方法来打印多维数组的所有元素。 在下面的代码中,我能够打印属于父Object类但不属于任何原始类型的任何多维数组的所有元素。 是否可以打印基本类型的多维数组的所有元素。 另一个疑问是,是否可以将int值保留在Object类型中,然后为什么不能将int []强制转换为Object []但将String []强制强制转换为Object []。

public class MultiDimension {
    public static void main(String[] args) {
        //final String ar[][][] = {{{"1","2"},{"3","4","5"}},{{"6","7","8"}},{{"9","10"},{"11"},{"12","13","14","15"}}};//new String[1][3][2][2];
        Integer intAr[][][][][][] = {{{{{{1},{2},{3}},{{4},{5},{6}}},{{{7}},{{8}}}}}};
        recPrintArray(intAr);
    }

    public static void recPrintArray(Object ar) {
        recPrintArray((Object[])ar,getDimensions(ar));
    }

    public static void recPrintArray(Object[] ar,int noODDimension) {
        for (Object obj:(Object[]) ar) {
            if (noODDimension > 0)
                recPrintArray((Object[])obj, noODDimension - 1);
            else {
                System.out.print("> " + obj + " ");
            }
        }
    }
    /*return the number of dimension of an array
     * takes any type as argument
     * using the Object class getClass() and Class class getName() methods 
     */
    public static int getDimensions(Object intAr) {
        return intAr.getClass().getName().lastIndexOf("[");
    }

}

要回答您的问题,我们需要首先介绍自动装箱的概念。 基本类型具有它们的class匹配项。 intIntegerdoubleDouble等等。 当需要将基本类型作为Object处理时,编译器将自动将其转换为包装class的实例。 由于您有一个Objects数组,因此您的原始值需要作为Objects ,因此将发生自动装箱。 如果希望以通用的方式实现此目的,则只需检查是否有数组,如果没有,则通过调用其toString方法来打印Object

关于第二个问题,您不能将原始数组转换为Object的数组,因为您的数组是为原始类型而不是Object分配的,但是您可以将String数组转换为Object数组,因为所有String都是Object s。

因为在Java中,多维数组是array的array,而array是一个对象。 因此,如果我对最后一个数组引用进行递归迭代,我将只会得到一个一维数组,我可以使用getClass()。getName()提供的类型显式地转换类型。

package learning;
public class MultiDimension {
    public static void main(String[] args) {
        final String ar[][][] = {{{"1","2"},{"3","4","5"}},{{"6","7","8"}},{{"9","10"},{"11"},{"12","13","14","15"}}};//new String[1][3][2][2];
        //Integer integerAr[][] = {{1},{2}};
        //byte byteAr[][] = {{1},{2}};
        //int[] intAr = (int[])byteAr;
        recPrintArray(ar);
    }

    public static void recPrintArray(Object ar) {
        recPrintArray(ar,getDimensions(ar));
    }

    public static void recPrintArray(Object ar,int noOfDimension) {
        for (Object obj:(Object[]) ar) {
            if (noOfDimension > 1)
                recPrintArray(obj, noOfDimension - 1);
            else {
                String dataType = obj.getClass().getName();
                switch (dataType) {
                case "[B":
                    printAll((byte[]) obj);
                    break;
                case "[S":
                    printAll((short[]) obj);
                    break;
                case "[I":
                    printAll((int[]) obj);
                    break;
                case "[J":
                    printAll((long[]) obj);
                    break;
                case "[F":
                    printAll((float[]) obj);
                    break;
                case "[D":
                    printAll((double[]) obj);
                    break;
                case "[Z":
                    printAll((boolean[]) obj);
                    break;
                case "[C":
                    printAll((char[]) obj);
                default:
                    printAll((Object[]) obj);
                }
                //System.out.print("> " + obj + " ");
            }
        }
    }

    public static void printAll(byte[] ar) {
        for (byte val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(short[] ar) {
        for (short val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(int[] ar) {
        for (int val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(long[] ar) {
        for (long val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(float[] ar) {
        for (float val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(double[] ar) {
        for (double val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(char[] ar) {
        for (char val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(boolean[] ar) {
        for (boolean val: ar)
            System.out.print(">" + val + " ");
    }

    public static void printAll(Object[] ar) {
        for (Object val: ar)
            System.out.print(">" + val + " ");
    }
    /*return the number of dimension of an array
     * takes any reference type as argument
     * using the Object class getClass() and Class getName() methods 
     */
    public static int getDimensions(Object intAr) {
        return intAr.getClass().getName().lastIndexOf("[");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM