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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凡延海 中级黑马   /  2012-6-1 21:39  /  2123 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我自己写了一个给定一个集合求出其所有的子集
public class TestString {
public static void main(String[] args) {
   String str="123";
   for(int i=0;i<3;i++)
   {
    for(int j=3;i<=j;j--)
    System.out.println(str.substring(i,j));
   }
  }

}
这个程序打印的结果是:
123
12
1
23
2

6 个回复

倒序浏览
貌似少了  0  ,13  ,3
回复 使用道具 举报
童鞋,你的问题是什么呢?
回复 使用道具 举报
杨天皓 发表于 2012-6-1 22:16
童鞋,你的问题是什么呢?

我的打印结果感觉不正确,想让高手改改。
回复 使用道具 举报
本帖最后由 王月 于 2012-6-2 10:19 编辑

你用了substring()这个方法,所以如果字符串在三个或三个以上就不会打印出所有的子字符串。

substring(i,j)获取的是脚标 i 到 j 之间所有的元素,1、13这个子字符串用这个方法肯定不会被打印到。
回复 使用道具 举报
我帮你读一下程序吧。
首先进入for循环外层
i=0
再进入内循环
i=0 j=3       //123
i=0 j=2       //12
i=0 j=1       //1
i=0 j=0      //注意:不会打出什么,因为substring(0,0)的意思是取大于或等于前面的0,而小于后面的0.看到没有?
substring(x,y)表示>=x或者<y.
一句话:含左不含右
你以后学习java类似的方法时差不多都可以参看这句话
回复 使用道具 举报
复制楼主代码运行了下,结果为:
123
12
1

23
2

3
楼主少个3哟

下面,记得要善于查询API文档哈。
先贴上API中的说明:
substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。
因此,该子字符串的长度为 endIndex-beginIndex。
注意:beginIndex - 开始处的索引(包括)。endIndex - 结束处的索引(不包括)。
这里还需要注意的是,索引结束为止是endIndex - 1 而不是 endIndex。

再下面分析下程序:
这是典型滴for循环套for循环。
然后顺序就是i=0:     i=0,j=3;    i=0,j=2;    i=0,j=1;     i=0,j=0;
                    i=1:     i=1,j=3;    i=1,j=2;    i=1,j=1;
                    i=2:     i=2,j=3;    i=2,j=2;
                    i=3:     i=3,j=3;
然后就是结果啦~拿第一个举例先:i=0,j=3那么按substring(i,j)规则str输出范围为0~3-1=2。也就是第一位到第三位啦~结果:123
其他类似。
但是当i=j时:按规则有sunstring(i,j)最终长度为j-i。
所以。i=j=0;   i=j=1;  i=j=2;  i=j=3;时字符串长度即为0,就是~木有结果~
因而一共有10次循环打印,4次木有结果,因而最终只输出的6个值:123 12 1  23 2  3
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马