我有一个程序,它创建了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提前
答案 0 :(得分:2)
您可以使用Number
类型作为数组类型。它由Integer
和Double
扩展。可以通过Autoboxing从double
或int
原始类型创建此类型,这将自动为您执行此转换。
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
}
}
答案 3 :(得分:0)
这是不可能的。您可以做的一些事情是:
方法重载。您可以使用相同的名称创建方法,只要它们具有不同的参数即可。 E.g:
private void printMap(int map[][]) {...}
private void printMap(double map[][]) {...}
然后,您可以使用printMap
或int[][]
作为参数调用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);
}
}