在java中使用selfmade print方法打印int或double

时间:2014-04-29 15:50:16

标签: java parameter-passing

我有一个程序,它创建了int和double的二维数组(有些是int,有些是double)。我写了一个方法将这些数组作为映射打印到控制台。但是我没有使用int和double两种方法,而是想知道是否可以接受int和double作为参数。

这是我的打印功能:

private void printMap(int map[][]){
    for (int i=0; i<map.length;i++){
        for (int j=0; j<map[i].length;j++){
            if(map[i][j]<1000)System.out.print(" ");
            if(map[i][j]<100)System.out.print(" ");
            if(map[i][j]<10)System.out.print(" ");
            System.out.print(imap[i][j]+" ");
        }
        System.out.println("");
    }   
}

现在除了参数之外,我有2次相同,比如:

    private void print_intMap(int map[][]){..}
    private void print_doubleMap(double map[][]){..}

我希望它像

    private void printMap(/*either int or double*/){..}

有什么想法吗? thx提前

7 个答案:

答案 0 :(得分:2)

您可以使用Number类型作为数组类型。它由IntegerDouble扩展。可以通过Autoboxingdoubleint原始类型创建此类型,这将自动为您执行此转换。

Number doubleNumber = 1.0;
Number intNumber = 1;

然后你的代码看起来像:

private void printMap(Number map[][]) {
    for (int i = 0; i < map.length; i++) {
        for (int j = 0; j < map[i].length; j++) {
            if(map[i][j].intValue() < 1000) System.out.print(" ");
            if(map[i][j].intValue() < 100) System.out.print(" ");
            if(map[i][j].intValue() < 10) System.out.print(" ");
            System.out.print(imap[i][j].intValue() + " ");
        }
        System.out.println("");
    }   
}

答案 1 :(得分:1)

我相信你最好的选择是使用多态。实质上,您创建两个具有相同名称的方法。唯一的区别是参数 - 一个将采用一个int,另一个将采取一个双。例如

private void printMap(int map[][])
private void printMap(double map[][])

这将允许您使用数组调用printMap,而无需检查类型。

答案 2 :(得分:0)

您想要做的事情被称为&#34;方法重载&#34;:http://en.wikipedia.org/wiki/Method_overloading 这是一个很好的例子,适合你想做的事情! :

public class MainClass {
  // method printArray to print Integer array
  public static void printArray(Integer[] inputArray) {
    // display array elements
    for (Integer element : inputArray)
      System.out.printf("%s ", element);
    System.out.println();
  }
  // method printArray to print Double array
  public static void printArray(Double[] inputArray) {
    // display array elements
    for (Double element : inputArray)
      System.out.printf("%s ", element);
    System.out.println();
  }

  // method printArray to print Character array
  public static void printArray(Character[] inputArray) {
    // display array elements
    for (Character element : inputArray)
      System.out.printf("%s ", element);

    System.out.println();
  }

  public static void main(String args[]) {
    // create arrays of Integer, Double and Character
    Integer[] integerArray = { 1, 2, 3, 4, 5, 6 };
    Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
    Character[] characterArray = { 'H', 'E', 'L', 'L', 'O' };

    System.out.println("Array integerArray contains:");
    printArray(integerArray); // pass an Integer array
    System.out.println("\nArray doubleArray contains:");
    printArray(doubleArray); // pass a Double array
    System.out.println("\nArray characterArray contains:");
    printArray(characterArray); // pass a Character array
  }
}

摘自本网站:http://www.java2s.com/Tutorial/Java/0100__Class-Definition/Usingoverloadedmethodstoprintarrayofdifferenttypes.htm

答案 3 :(得分:0)

这是不可能的。您可以做的一些事情是:

  • 方法重载。您可以使用相同的名称创建方法,只要它们具有不同的参数即可。 E.g:

    private void printMap(int map[][]) {...}
    private void printMap(double map[][]) {...}
    

    然后,您可以使用printMapint[][]作为参数调用double[][],然后执行相应的方法。

  • 让它接受Number[][]

    private void printMap(Number map[][]) {...}
    

答案 4 :(得分:0)

你可以把方法作为参数加倍,并在用'int'调用方法时进行转换

printMap((double)map[][])

答案 5 :(得分:0)

我建议将int变量转换为double变量,然后在你的类中使用它(我相信这是最简单的解决方案):

int x=7;
double y=(double)x;  
print_doubleMap(y);
//or  
print_doubleMap((double)x);

答案 6 :(得分:0)

你可以使用反射,但它很丑陋

public static void print(int[][] ints) {
    printMatrix(ints);
}

public static void print(double[][]] doubles) {
    printMatrix(doubles);
}

public static void printMatrix(Object o) {
    int len1 = Array.getLength(o);
    for(int i = 0; i < len1; i++) {
         Object o2 = Array.get(o, i);
         int len2 = Array.getLength(o2);
         for(int j = 0; j < len2; j++) 
             System.out.printf("%4s ", Array.get(o2, j);
         System.out.println();
    }
}

我不知道这是否比复制方法更清洁。

public static void print(int[][] ints) {
    for(int[] is : ints) {
        for(int i : is)
            System.out.printf("%4d ", i);
        System.out.println(i);
    }
}