黑马程序员技术交流社区
标题:
怎么求一个数组的维数?求具体例子代码
[打印本页]
作者:
石德志
时间:
2012-2-25 10:10
标题:
怎么求一个数组的维数?求具体例子代码
本帖最后由 石德志 于 2012-2-25 15:51 编辑
怎么求一个数组的维数?求具体例子代码
作者:
陈丹阳
时间:
2012-2-25 11:57
package cn.chdany;
import java.lang.reflect.Array;
public class Dimension {
public static void main(String[] args) {
int[][][][] arr = new int[4][3][2][2];
int count=1;
Object o =arr[0];
while(o.getClass().isArray()){
count++;
o = Array.get(o, 0);
}
System.out.println(count);
}
}
复制代码
作者:
陈丹阳
时间:
2012-2-25 12:18
我不知道有没有具体的函数可以一步解决。。我的方法是每次取出一个元素,看是不是数组,如果是,计数+1,再次判断取出的元素是不是数组
作者:
沈样
时间:
2012-2-25 16:04
我觉得有个方法可以判断,不知道对不对请指教, java每个类都来自于object,在这个类中有个toString()的方法,可以改成这个方法让返回一个数组的维数,这个方法内容是:getClass().getName() + '@' + Integer.toHexString(hashCode()),我们可以提取getClass().getName(),跟具返回"["就可以知道这个几维数组,还可以知道数据的类型,待会测试成功把代码贴上来
作者:
沈样
时间:
2012-2-25 17:00
public static void main(String[] args) {
// TODO Auto-generated method stub
int y[] = {3};
char[] str=y.getClass().getName().toCharArray();
getArray(str);
}
public static int getArray(char[] str){
System.out.println(str.length+":count");
int count= 0;
for(int x = 0;x<str.length;x++){
if(x<0)
{
return 0;
}else
{
if(str[x]=='[')
{
++count;
}
}
}
return count;
}
这个程序有点小问题,有安全问题,传基本类型会有问题,待会再想想处理一下
作者:
沈样
时间:
2012-2-25 18:18
升级版:可以解决上面的错误
public static int getArrayCount(Object...y){
System.out.println(y[0].getClass().getSimpleName()+":count");
char[] str=y[0].getClass().getName().toCharArray();
int count= 0;
for(int x = 0;x<str.length;x++){
if(x<0)
{
return 0;
}else
{
if(str[x]=='[')
{
++count;
}
}
}
return count;
}
作者:
孙汇川
时间:
2012-2-25 20:31
b.getClass().isArray 可以判断b是不是数组,如果是数组,再可以判断b的第一个元素是不是数组,依次判断。
作者:
黄秋
时间:
2012-2-26 03:31
沈样 发表于 2012-2-25 16:04
我觉得有个方法可以判断,不知道对不对请指教, java每个类都来自于object,在这个类中有个toString()的方 ...
你的想法太有创意了!
用toString(),“跟具(根据)返回"["就可以知道这个几维数组”。我原先据此写了个方法dim 得到数组维数,后发现只用一语句也行:
public class Test {
static int dim(Object obj){
int i=0,index=0;
while((index=obj.toString().indexOf("[",index))!=-1){
i++; index++;
}
return i;
}
public static void main(String[] args) throws Exception
{
int[] a1 = new int[] { 12, 12, 34 };
Integer[] aa = new Integer[] { 12, 12, 34 };
Integer[][] a2 = new Integer[][] { { 12, 34 }, { 112, 12, 34 } };
int[][][] a5 ={ {{ 12, 34 }}, {{ 112, 12, 34 }} };
String[] a3 = new String[] { "asd", "lhm", "zxx", "bxd" };
String[][] a4 = new String[][] { { "asd", "lhm", "zxx", "bxd" },{ "asd", "lhm", "zxx", "bxd" } };
List[] list ={Arrays.asList(aa),Arrays.asList(a3)};
System.out.println(dim(a5));
System.out.println(a5.toString().split("\\[").length-1); //这样一语句可得维数
}
}
复制代码
arr.toString().split("\\[").length-1
,就得到维数了(对 List[] 也行),够简洁吧,当然效率、兼容性未知,请大家讨论。
作者:
沈样
时间:
2012-2-26 18:41
呵呵正则这个视频我还没看到,不会正则下次可以试试呵呵看来要加油了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2