首页 > 解决方案 > 如何在 Java 中打印智能数组?

问题描述

我想打印单变量、数组和双数组,我使用以下代码,在需要时添加一个类型,但是......如你所见......它有效但不聪明。

所以,问题是“有打印数组的聪明方法吗?”

import java.util.Arrays;

class Rec{
    int val;
    public String toString(){
        return "" + val;
    }
    Rec(int val){this.val=val;}
}
public class Main
{
    public static void main(String[] args) {
        Rec r = new Rec(0);
        Boolean[] ba = new Boolean[]{true, false, true, true};
        Rec[] ra = new Rec[]{new Rec(1), new Rec(2), new Rec(3)};
        int[][] iaa = new int[][]{{1,2,3}, {3,4,5}};
        System.out.printf("r=%s ba=%s ra=%s iaa=%s \n", s(r), s(ba), s(ra), s(iaa));
    }

    static <T> String  s(T n)   {
        if(n instanceof int[]){
            return Arrays.toString((int[])n);
        }else if(n instanceof int[][]){
            return Arrays.deepToString((int[][])n);
        }else if(n instanceof boolean[]){
            return Arrays.toString((boolean[])n);
        }else if(n instanceof boolean[][]){
            return Arrays.deepToString((boolean[][])n);
        }else if(n instanceof Boolean[]){
            return Arrays.toString((Boolean[])n);
        }else if(n instanceof Rec[]){
            return Arrays.toString((Rec[])n);
        //}else if(n instanceof T[]){             // error: illegal generic type for instanceof
        //  return Arrays.toString((T[])n);
        }else{
            return "" + n;  
        }
    }
}

标签: java

解决方案


如果您真的想为可变数组自定义打印,那么为什么不执行以下操作:

    public static String s(Object s) {
        return s.toString();
    }
    public static String s(Object[] s) {
        return Arrays.toString(s);
    }
    public static String s(Object[][] s) {
         return Arrays.deepToString(s);
    }
    // For each primitive type of your single or multi dimension
    // declare the following for either single or multi dimensional
    public static String s(int[][] s) {
        return Arrays.deepToString(s);
    }
    public static String s(int[] s) {
        return Arrays.toString(s);
    }

但请记住,您基本上是在重新打包 API 已经完成的功能。


推荐阅读