String sClassName = array1.getClass().getName(); if(sClassName.substring(0,1).equals("[")){ System.out.println("The array1 is a Array"); }
更正instanceof Object[] 似乎不太对劲
instanceof Object[] 不能判断 int[]这种对象
同意楼上的. 我加一种方法: public boolean isArray(Object arr) { boolean ret = true; try { //check if throw exception arr.length; } catch(Exception ex) { ret = false; } return ret; }
public class tdmBean { public boolean isClass(Object obj){ Class c=obj.getClass(); return c.isArray(); } public static void main(String[] args) { int[] a=new int[3]; tdmBean tdm=new tdmBean(); boolean flag=tdm.isClass(a); System.out.println("FLAG:"+flag); } }FLAG:true
判断问题我已经解决了不过出现了一个新的问题,大家给看看我接收了一个N级的未知类型的数组,我需要把这个数组的所有一维数组给解析出来以一个2维的int[]为例子,我写了一个程序,想把这个数组里的所有一维数组解析出来,并计算和问题出在下面程序注释的两个地方,大家给看看import java.lang.reflect.Array;public class RRR { int[][] a={{1,2,3},{4}}; int sum=0;
public void recurse(Object arr) { if (arr.getClass().isArray()) { for (int i=0;i<Array.getLength(arr);i++) { recurse(arr[i]);// 这么写不行,我不知道用什么type去cast这个arr } } for (int j=0;j<Array.getLength(arr);j++) { sum+=arr[i];//这么写不行,我不知道用什么type去cast这个arr } sum=0; System.out.println(sum); } }
我给你改编译通过了,但肯定运行不了,因为你的recurse循环运行, 而r.a只是二维的.个中情况,自己再看吧.import java.lang.reflect.Array;public class RRR { int[][] a={{1,2,3},{4}}; int sum=0; public static void main(String args[]) { try { RRR r=new RRR(); r.recurse(r.a); } catch(Exception e) { e.printStackTrace(); } } public void recurse(Object[] arr) { if (arr.getClass().isArray()) { for (int i=0;i<Array.getLength(arr);i++) { recurse((Object[])arr[i]); } } for (int j=0;j<Array.getLength(arr);j++) { sum+=Integer.parseInt((String)arr[j]); } sum=0; System.out.println(sum); } }
public void recurse(Object arr) { if (arr.getClass().isArray()) { for (int i=0;i<Array.getLength(arr);i++) { try{ if (Array.get(arr,i).getClass().isArray()) recurse(Array.get(arr,i));// Õâôд²»ÐУ¬ÎÒ²»ÖªµÀÓÃʲôtypeÈ¥castÕâ¸öarr else sum+=Array.getInt(arr,i); }catch(Exception e){}
} } System.out.println(sum); }运行结果:6 10 10
java.lang.ClassCastException: [I at YYY.recurse(YYY.java:27) at YYY.main(YYY.java:13) 无法正确的cast和我刚才停在那里不是一样啊
public void recurse(Object arr) { if (arr.getClass().isArray()) { for (int i=0;i<Array.getLength(arr);i++) { try{ if (Array.get(arr,i).getClass().isArray()) recurse(Array.get(arr,i)); else sum+=Array.getInt(arr,i); }catch(Exception e){}
} } System.out.println(sum); }运行结果:6 10 10
这样可能思路比较清晰一点: public void recurse(Object arr) { if (arr.getClass().isArray()) { for (int i=0;i<Array.getLength(arr);i++) { boolean check=false; try{ check=Array.get(arr,i).getClass().isArray(); }catch(Exception e){} if (check) recurse(Array.get(arr,i)); else sum+=Array.getInt(arr,i); } } System.out.println(sum); }
程序是没有问题了,不过最后一个为什么会输出0呢import java.lang.reflect.Array;public class YYY { int[][] a={{1,2,3},{4}}; int sum=0; public static void main(String args[]) { try { YYY r=new YYY(); r.recurse(r.a); } catch(Exception e) { e.printStackTrace(); } } public void recurse(Object arr) { if (arr.getClass().isArray()) { for (int i=0;i<Array.getLength(arr);i++) { if (Array.get(arr,i).getClass().isArray()) { recurse(Array.get(arr,i)); } else { sum+=Array.getInt(arr,i); } } } System.out.println(sum); sum=0; } }
对, instanceof Object[]肯定正确。
if(sClassName.substring(0,1).equals("[")){
System.out.println("The array1 is a Array");
}
我加一种方法:
public boolean isArray(Object arr) {
boolean ret = true;
try {
//check if throw exception
arr.length;
} catch(Exception ex) {
ret = false;
}
return ret;
}
{
public boolean isClass(Object obj){
Class c=obj.getClass();
return c.isArray();
}
public static void main(String[] args)
{
int[] a=new int[3];
tdmBean tdm=new tdmBean();
boolean flag=tdm.isClass(a);
System.out.println("FLAG:"+flag);
}
}FLAG:true
{
int[][] a={{1,2,3},{4}};
int sum=0;
public static void main(String args[])
{
try
{
RRR r=new RRR();
r.recurse(r.a);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void recurse(Object arr)
{
if (arr.getClass().isArray())
{
for (int i=0;i<Array.getLength(arr);i++)
{
recurse(arr[i]);// 这么写不行,我不知道用什么type去cast这个arr
}
}
for (int j=0;j<Array.getLength(arr);j++)
{
sum+=arr[i];//这么写不行,我不知道用什么type去cast这个arr
}
sum=0;
System.out.println(sum);
}
}
而r.a只是二维的.个中情况,自己再看吧.import java.lang.reflect.Array;public class RRR
{
int[][] a={{1,2,3},{4}};
int sum=0; public static void main(String args[])
{
try
{
RRR r=new RRR();
r.recurse(r.a);
}
catch(Exception e)
{
e.printStackTrace();
}
} public void recurse(Object[] arr)
{
if (arr.getClass().isArray())
{
for (int i=0;i<Array.getLength(arr);i++)
{
recurse((Object[])arr[i]);
}
}
for (int j=0;j<Array.getLength(arr);j++)
{
sum+=Integer.parseInt((String)arr[j]);
}
sum=0;
System.out.println(sum);
}
}
{
if (arr.getClass().isArray())
{
for (int i=0;i<Array.getLength(arr);i++)
{
try{
if (Array.get(arr,i).getClass().isArray()) recurse(Array.get(arr,i));// Õâôд²»ÐУ¬ÎÒ²»ÖªµÀÓÃʲôtypeÈ¥castÕâ¸öarr
else sum+=Array.getInt(arr,i);
}catch(Exception e){}
}
}
System.out.println(sum);
}运行结果:6
10
10
at YYY.recurse(YYY.java:27)
at YYY.main(YYY.java:13)
无法正确的cast和我刚才停在那里不是一样啊
{
if (arr.getClass().isArray())
{
for (int i=0;i<Array.getLength(arr);i++)
{
try{
if (Array.get(arr,i).getClass().isArray()) recurse(Array.get(arr,i));
else sum+=Array.getInt(arr,i);
}catch(Exception e){}
}
}
System.out.println(sum);
}运行结果:6
10
10
public void recurse(Object arr)
{
if (arr.getClass().isArray())
{
for (int i=0;i<Array.getLength(arr);i++)
{
boolean check=false;
try{
check=Array.get(arr,i).getClass().isArray();
}catch(Exception e){}
if (check) recurse(Array.get(arr,i));
else sum+=Array.getInt(arr,i);
}
}
System.out.println(sum);
}
{
int[][] a={{1,2,3},{4}};
int sum=0; public static void main(String args[])
{
try
{
YYY r=new YYY();
r.recurse(r.a);
}
catch(Exception e)
{
e.printStackTrace();
}
} public void recurse(Object arr)
{
if (arr.getClass().isArray())
{
for (int i=0;i<Array.getLength(arr);i++)
{
if (Array.get(arr,i).getClass().isArray())
{
recurse(Array.get(arr,i));
}
else
{
sum+=Array.getInt(arr,i);
}
}
}
System.out.println(sum);
sum=0;
}
}