A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张建银 黑马帝   /  2012-2-7 22:09  /  2911 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

已知一个数组(可能是一维也可能是多维),所有最内层数组存放的是基本数据类型,要求打印出这个数组中所有基本数据类型的值,请写出程序?一道题想半天,有人会写吗?大家都来动动脑筋

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

18 个回复

正序浏览
哦,原来如此,谢了!
回复 使用道具 举报
黄秋 黑马帝 2012-2-11 19:59:50
18#
戴振良 发表于 2012-2-11 18:08
你好,请问你的这个代码的表格是怎么弄进去的,这样看着代码清楚,我也想学一下,谢谢!! ...



按那个红色的“<>",就可以添加代码了。复制代码到文本区,再点提交。
回复 使用道具 举报
黄秋 发表于 2012-2-9 22:28
其实数组还有个deepToString,从1.5开始。 Arrays.deepToString(arr) 就可以返回指定数组“深层内容”的字 ...

你好,请问你的这个代码的表格是怎么弄进去的,这样看着代码清楚,我也想学一下,谢谢!!
回复 使用道具 举报
张建银 发表于 2012-2-8 23:21
最内层数组的成员是基本数据类型,即1,{1},{2}就是最内层数组

我这个二维数组总共就两个元素,你说的两个元素都是内层数组,那没有外层数组吗?
还是请再举个维数多一点的数组,标明哪一层是内层数组,哪一层是外层数组,谢谢!
回复 使用道具 举报
Arrays.deepToString(arr) 就可以返回指定数组“深层内容”的字符串表示形式,能处理多维数组。
回复 使用道具 举报
黄秋 黑马帝 2012-2-9 22:28:00
14#
其实数组还有个deepToString,从1.5开始。 Arrays.deepToString(arr) 就可以返回指定数组“深层内容”的字符串表示形式,能处理多维数组。
  1. import java.util.*;

  2. public class Test{
  3.         public static void main(String[] args)
  4.         {
  5.                 Object[][][] arr = {  
  6.                 {{1,2},{3,1}},  
  7.                 {{false,'b'}},  
  8.                 {{3,4},{"aa"}}
  9.                 };  
  10.                 showArray(arr);               
  11.                 System.out.println(Arrays.deepToString(arr));
  12.         }
  13.         static void showArray(Object[] arr){
  14.                 for(Object a :arr){               
  15.                         if(a.getClass().isArray())
  16.                                 showArray((Object[]) a);
  17.                         else
  18.                                 System.out.println(a);
  19.                 }
  20.         }
  21. }
复制代码
当然,自己写的方法更灵活,但deepToString 也是一个不错的选择。
回复 使用道具 举报
黄秋 黑马帝 2012-2-9 21:51:46
13#
你是否指把“for(Object a :arr)” 里的 Object a转换成object[]?这显然不行的,因 arr 是Object[]。如 a 是Object[],arr 就要是Object[][] 了。
回复 使用道具 举报
黄秋 发表于 2012-2-9 04:46
思路:
1. 由于已知:最内层数组存放的是基本数据类型,所以与“列出目录(可能有子目录)下所有文件”很相似 ...

你试试能不能把object的a转换成object[],并且你运行下是否能打印成功
回复 使用道具 举报
黄秋 黑马帝 2012-2-9 04:46:06
11#
思路:
1. 由于已知:最内层数组存放的是基本数据类型,所以与“列出目录(可能有子目录)下所有文件”很相似,列出文件是遍历整个目录,列出数组的元素就是遍历这个多维数组。因层次未知,递归可以遍历。

2. 类似地,列出文件是先考虑一个目录,遍历数组也先考虑一维数组:
for(int a :arr)
     System.out.println(a);

3. java的多维数组,实际上是数组的数组。是数组的,调用自身继续深入,不是则打印:
  1. public class Test{
  2.         public static void main(String[] args)
  3.         {
  4.                 Object[][] arr = {  
  5.                 {1,2,3,1},  
  6.                 {1,3},  
  7.                 {3,4,"aa"}
  8.                 };  
  9.                 showArray(arr);       
  10.         }
  11.         static void showArray(Object[] arr){
  12.                 for(Object a :arr){               
  13.                         if(a.getClass().isArray())
  14.                                 showArray((Object[]) a);
  15.                         else
  16.                                 System.out.println(a);
  17.                 }
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
张建银 发表于 2012-2-8 23:20
int[1][2]就是二维数组里面2个1维数组={{1},{2}}

最内层数组的成员是基本数据类型,即1,{1},{2}就是最内层数组
回复 使用道具 举报
戴振良 发表于 2012-2-8 23:09
看的不是很懂,希望更详细一些的:如:
int [][] a=new int[1][2];
a[0][0]=1;

int[1][2]就是二维数组里面2个1维数组={{1},{2}}
回复 使用道具 举报
戴振良 发表于 2012-2-8 22:27
看不懂,while()括号中的值必须是boolean型的,不能确定a一定为boolean型,所以这个语句不对,请修改
...

说了是伪代码啊,
就是说这个是理论
可以用C++或者java甚至其他语言实现
但是未必能用java完全实现

你要java实现那个循环也可以
  1. while(new Integer(a[0])instanceof Integer){
  2.                                
  3.                         }
复制代码
回复 使用道具 举报
张建银 发表于 2012-2-8 22:42
{{{2,3},{2,4}},{{4,6},{8,9}},{{4,6},{5,6}}}=int[2][2][3]

看的不是很懂,希望更详细一些的:如:
int [][] a=new int[1][2];
a[0][0]=1;
a[0][1]=2;
在这三句语句中,什么是最内层数组,我都不知道怎么去理解,如果维数不够,请再写给三维数组,并象我以上代码那样式,并在代码后加点注释就容易看懂了,谢谢!
回复 使用道具 举报
戴振良 发表于 2012-2-8 22:31
在这里我要提个问题:就是什么是最内层数组,请大家随便举个维数比较少的数组,赋几个值,然后在代码后注释 ...

{{{2,3},{2,4}},{{4,6},{8,9}},{{4,6},{5,6}}}=int[2][2][3]
回复 使用道具 举报
本帖最后由 余海龙 于 2012-2-8 22:49 编辑

假设arr是未知数组名
void  test(){
           for(int x : arr){
                  if(x  instanceof   int)
                           System.out.print( x );
                   else
                           test( );
          }
}
        
用递归的思想应该可以得出结果吧!
回复 使用道具 举报
在这里我要提个问题:就是什么是最内层数组,请大家随便举个维数比较少的数组,赋几个值,然后在代码后注释一下哪有哪几层,哪一层是最里层、最外层?
我想这个问题应该也有很多像我这们的菜鸟不知道吧?如果这算是个问题,请给个技术分谢谢!!

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题加分!

查看全部评分

回复 使用道具 举报
彭嘉聪 发表于 2012-2-8 01:39
用伪代码好了,但是这个数组也不能传入方法啊

取a i= 0

看不懂,while()括号中的值必须是boolean型的,不能确定a一定为boolean型,所以这个语句不对,请修改
回复 使用道具 举报
用伪代码好了,但是这个数组也不能传入方法啊

取a[i] i= 0
int x = 1;
while(a[i]类型为基本类型){
    维数增加a[i][i]
     x++;

得出X后,就是维数
利用多重循环
输出

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马