黑马程序员技术交流社区

标题: 数组这样的过程是怎么生成的 [打印本页]

作者: 山水游客    时间: 2012-6-27 16:37
标题: 数组这样的过程是怎么生成的
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循环的过程中数组中的值不会被覆盖么?
作者: 车风波    时间: 2012-6-27 17:17
每次外循环的时候String[] sSecond = sFirst[i].split(",");都会执行一遍,也就是sSecond 所指向的对象都不同。
作者: 黄连兵    时间: 2012-6-27 17:25
本帖最后由 黄连兵 于 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
}
}
}

作者: Forever。    时间: 2012-6-27 17:29
本帖最后由 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, 下载次数: 12)

未命名.jpg

作者: 陌花╮有意、    时间: 2012-6-27 17:31
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},在内循环时又分别
对这三部分进行切割,且每一次内循环都是独立的不存在覆盖





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2