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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-6-27 16:37  /  1575 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test {
public static void main(String[] args) {
double[][] d;
String s = "1,2;3,4,5;6,7,8";
String[] sFirst = s.split(";");
for(int i=0; i<sFirst.length; i++) {
String[] sSecond = sFirst[i].split(",");
for(int j=0;j<sSecond.length;j++){
System.out.print(sSecond[j] + "");
}
}
}
运行结果1 2 3 4 5 6 7 8
我想知道的是在第一个for循环的过程中数组sSecond[]的值是怎么生成的?在i循环的过程中数组中的值不会被覆盖么?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

4 个回复

正序浏览
public class ArrayTest {
public static void main(String[] args) {
  double[][] d;
  String s = "1,2;3,4,5;6,7,8";
  String[] sFirst = s.split(";");
  // System.out.println(sFirst);
  for (int i = 0; i < sFirst.length; i++) {
   System.out.println(sFirst[i] + "...");
   String[] sSecond = sFirst[i].split(",");
   for (int j = 0; j < sSecond.length; j++) {
    System.out.print(sSecond[j] + " ");
   }
   System.out.println();
  }
}
}

结果:
1,2...
1 2
3,4,5...
3 4 5
6,7,8...
6 7 8
这样就可以清楚的看到执行的过程了
在外循环时s被切割成3部分,sFirst[0]={1,2},sFirst[1]={3,4,5},sFirst[2]={6,7,8},在内循环时又分别
对这三部分进行切割,且每一次内循环都是独立的不存在覆盖

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 Forever。 于 2012-6-27 17:32 编辑

public class Test {
public static void main(String[] args) {
double[][] d;
String s = "1,2;3,4,5;6,7,8";
String[] sFirst = s.split(";");//第一次将s更具;去分割返回一个数组也就是{"1,2","3,4,5","6,7,8"}
for(int i=0; i<sFirst.length; i++) {
String[] sSecond = sFirst.split(",");//第二次吧第一次的数组循环遍历一次然后呢产生了不同的数组
for(int j=0;j<sSecond.length;j++){//其实关键在这里 这里是一个嵌套循环。如果不是嵌套循环你的疑问就成立了。如果是嵌套循环,他每次循环遍历的sSecond是不一样的。然后输出了现在的结果
System.out.print(sSecond[j] + "");
}
}
}

}还有你这里少了一个大括号 呵呵

未命名.jpg (137.86 KB, 下载次数: 13)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 黄连兵 于 2012-6-27 17:28 编辑

在新的数据生成之前,你其实已经打印出来了~!
那不是覆盖哦,String类型生成后是不能改变的,只是你的引用指向了新生成的对象。
下面注释部分是我分析的第一次循环的结果:供参考!
public class Test {
public static void main(String[] args) {
double[][] d;
String s = "1,2;3,4,5;6,7,8";
String[] sFirst = s.split(";");//sFirst =={"1,2","2,4,5","6,7,8"}
for(int i=0; i<sFirst.length; i++) {//sFirst.length==3
String[] sSecond = sFirst.split(",");//sSecond=={"1","2"}
for(int j=0;j<sSecond.length;j++){//sSecond.length==2
System.out.print(sSecond[j] + "");//打印出:1 2
}
}
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
每次外循环的时候String[] sSecond = sFirst[i].split(",");都会执行一遍,也就是sSecond 所指向的对象都不同。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马