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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马欢 黑马帝   /  2012-1-27 15:52  /  2295 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马欢 于 2012-1-27 17:34 编辑

public class D311 {
/**
0.1.2.3可以组成多少个三位整数
*/
       
        public static void main(String[] args) {
                  int m=0,n=0,s=0,i,j,k;
                  int[] a=new int[100];
                  for(i=1;i<=3;i++)
                  {   for(j=0;j<=3;j++)
                  {   for(k=0;k<=3;k++)
                  {   if(i==j||i==k||j==k)  continue;
                            else{
                       a[m]=i*100+j*10+k;
                       m++;
                      }
                  }      
                  }
                  }
                    for (n=0;n<100;n++)
                    {
                    s+=a[n];
                    System.out.print(a[n]+",");
                    if((n+1)%10==0)
                   System.out.println();
                   }
                     
        }

}

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 淡定

查看全部评分

9 个回复

倒序浏览
按照你的程序 你是想打印0123组成的无重复数字的三位数 我运行了你的程序 结果已经将符合要求的所有三位数打印了出来了 当打印完321之后 for循环就结束了(你可以再程序里加入一句System.out.println(m); 观察打印结果m为18 )所以从第19个数开始数组a里面的元素并未初始化 那么当你后来打印数组时 从第19个数开始就是数组的默认元素0了 所以打印了N多的0

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
a=new int[100]; a有100个元素,数组后面的没赋值,默认为0,就有这么多0。可以加个判断,为0不打印就行了。
回复 使用道具 举报
尹旗龙 发表于 2012-1-27 16:58
按照你的程序 你是想打印0123组成的无重复数字的三位数 我运行了你的程序 结果已经将符合要求的所有三位数 ...

但是对于用户来说没有办法修改代码,而对于写程序的人在运行前又不知道结果到底会有多少个。怎么让他有多少个就打印多少个,而不改变写程序的人编写的代码?
回复 使用道具 举报
java数组不支持可变长度,ArrayList 支持:
  1. import java.util.*;

  2. public class Test{
  3.         public static void main(String[] args) {
  4.           int m=0,n=0,s=0,i,j,k;
  5.           ArrayList<Integer> a=new ArrayList<Integer>();
  6.           for(i=1;i<=3;i++)
  7.           { for(j=0;j<=3;j++)
  8.                   { for(k=0;k<=3;k++)
  9.                          if(i==j||i==k||j==k)  continue;
  10.                                         else{
  11.                            a.add(i*100+j*10+k);
  12.                           }                
  13.                   }
  14.           }
  15.           System.out.println(a);
  16.         }
  17. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
很简单 输出时for循环里面让n<m 这样结果就符合你说的了吧
或者高级些你可以用动态数组
回复 使用道具 举报
尹旗龙 黑马帝 2012-1-27 17:34:05
7#
哦 正好楼长已经把动态数组的写出来了 我就不写了
回复 使用道具 举报
逄焕玮 黑马帝 2012-1-28 00:42:35
8#
黄秋 发表于 2012-1-27 17:30
java数组不支持可变长度,ArrayList 支持:

System.out.println(a);
//[102, 103, 120, 123, 130, 132, 201, 203, 210, 213, 230, 231, 301, 302, 310, 312, 320, 321]
把引用变量扔进去,会直接把集合封装好,两边还带着中括号 [ ,  , ] 打印出来
数组这么办的话,会打印   类名@哈希值

麻烦问下,什么集合有这些功能啊?具体说下,这到底是覆盖哪个方法还是怎么回事啊?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黄秋 黑马帝 2012-1-28 01:36:15
9#
逄焕玮 发表于 2012-1-28 00:42
System.out.println(a);
//[102, 103, 120, 123, 130, 132, 201, 203, 210, 213, 230, 231, 301, 302, 31 ...

问题提得好,我以前对此也是一知半解。现查API手册:System.out.println(a)
--> PrintStream.println(java.lang.Object):此方法首先调用 String.valueOf(x) 获取打印对象的字符串值,然后的行为如同先调用 print(String) 再调用 println() 一样。
--> String.valueOf(Object obj):如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
-->Object 的 toString():返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。

集合重写了toString 方法,例如查ArrayList,它的toString 方法继承自 AbstractCollection:返回此 collection 的字符串表示形式。该字符串表示形式由 collection 元素的列表组成,这些元素按其迭代器返回的顺序排列,并用方括号 ("[]") 括起来。相邻元素由字符 ", "(逗号加空格)分隔。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黄秋 发表于 2012-1-28 01:36
问题提得好,我以前对此也是一知半解。现查API手册:System.out.println(a)
--> PrintStream.println(ja ...

谢谢啦:)
你说的前两个方法我都没见过:L
讲解非常详细,尤其是最后toString()的讲解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马