黑马程序员技术交流社区
标题:
数组这样的过程是怎么生成的
[打印本页]
作者:
山水游客
时间:
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)
下载附件
2012-6-27 17:32 上传
作者:
陌花╮有意、
时间:
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