请教大神问题,关于continue;

痞子纵横 2014-05-13 09:44:19
书籍源程序:

执行错误信息:

新手请教大神:21天学通java2(第三版)中有这样一段代码,我无论如何运行都会报错,有人看过这份教材嘛?到底是代码有问题呢?还是自己哪点没理解透,请大神指导~分数有限,见谅!
需要实现的目标:


完成源码:我修改了几种方式貌似都可以实现,就这种不行:
class CopyArrayWhile
{
public static void main(String[] args)
{
int[] Array1={7,4,8,1,4,1,4};
float[] Array2=new float[Array1.length];
System.out.print("Array1:[");
for(int i=0;i<Array1.length;i++){
System.out.print(Array1[i]+" ");
}
System.out.println("]");

int count=0;
int countt=0;
System.out.print("Array2:[");

/*while(count<Array2.length&&Array1[count]!=1){
Array2[count]=(float)Array1[count];
System.out.print(Array2[count++]+" ");
}
*/

/***********while+break**************
while(count<Array2.length){
if(Array1[count]==1)
break;
Array2[count]=(float)Array1[count];
System.out.print(Array2[count++]+" ");
}
*/

/********while+continue****************
while(count<Array1.length){
if(Array1[count]==1){
count++;
continue;
}
Array2[countt]=(float)Array1[count];
System.out.print(Array2[countt]+" ");
count++;
countt++;
}
*/

while(count++<=Array1.length){
if(Array1[count]==1){
continue;
}
Array2[countt++]=(float)Array1[count];
System.out.print(Array2[countt]+" ");
}

/************for+continue******************
for(count=0;count<Array1.length;count++){
if(Array1[count]==1)
continue;
Array2[countt]=(float)Array1[count];
System.out.print(Array2[countt++]+" ");
}
*/
System.out.print("]");
}
}
...全文
244 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
小绵羊 2014-05-14
  • 打赏
  • 举报
回复
我了个擦,lz快把这本书扔了,别被这本书祸害了。 给你个修正版的

//ps:吐槽下这个变量名,count一般在统计的时候用,用i或者index,idx之类的都直观多了
int count=0;
int count2=0;
//count=array1.length就越界了,数组索引是从0开始的,所以最大索引为array.length-1,示例里的越界都不知道越界到哪里去了
while(count<array1.length){
if(array[count]==1){
break;//这才是终止循环,continue是跳过后面的代码继续执行下次循环
}
array2[count2]=array1[count];
//++操作放在最后是个好习惯
count++;
count2++;
}
  • 打赏
  • 举报
回复
这题 本来就错了。确实异常。
RICHEER COCA 2014-05-13
  • 打赏
  • 举报
回复
路过学习了,
痞子纵横 2014-05-13
  • 打赏
  • 举报
回复
引用 5 楼 qingfeng00827 的回复:
[quote=引用 4 楼 qingfeng00827 的回复:] [quote=引用 1 楼 lliiqiang 的回复:] 数组越界越得离谱了. count++之后判断加之前是否在范围之内,但是count已经加了,还<=长度,=长度就已经越界了,编程中数组从0开始计算是基本常识.程序里面用的count也是加了之后的count,完全错乱了.
我也这么觉得的,所以应该确认是书籍出问题了吧?[/quote] 我想理解的就是count++的赋值范围,一般count++是在先使用再++,那么它的使用范围到底是到哪里停止呢?是说这语句在整个while执行之后回滚++,还是说如果这部分先++了再执行下面的程序呢?比如,int j=count++;那j的值应该还是为0吧?[/quote] 还有个问题:就是如果 打印值是从1开始的; 如果 打印值就从0开始了;确实有点不太理解,大神能不能指导下呀?
痞子纵横 2014-05-13
  • 打赏
  • 举报
回复
引用 7 楼 u010617434 的回复:
这写的书害人匪浅啊 利马换了
这本书好像是国外的人写的,我查了下最新的java6原版,也是这个问题,我总觉得应该不至于出现这么低级的错误,而且count++的值确实是使用之后再赋值,原则上只是<=那里似乎有点问题,语句这样写应该是可以的,但是好像即使<=改为<还是溢出,我调试了下,溢出的原因应该在count2上了好像~
Lahne 2014-05-13
  • 打赏
  • 举报
回复
这写的书害人匪浅啊 利马换了
fangcaolieren 2014-05-13
  • 打赏
  • 举报
回复
应该是21天绝对毁了你的书籍吧
痞子纵横 2014-05-13
  • 打赏
  • 举报
回复
引用 4 楼 qingfeng00827 的回复:
[quote=引用 1 楼 lliiqiang 的回复:] 数组越界越得离谱了. count++之后判断加之前是否在范围之内,但是count已经加了,还<=长度,=长度就已经越界了,编程中数组从0开始计算是基本常识.程序里面用的count也是加了之后的count,完全错乱了.
我也这么觉得的,所以应该确认是书籍出问题了吧?[/quote] 我想理解的就是count++的赋值范围,一般count++是在先使用再++,那么它的使用范围到底是到哪里停止呢?是说这语句在整个while执行之后回滚++,还是说如果这部分先++了再执行下面的程序呢?比如,int j=count++;那j的值应该还是为0吧?
痞子纵横 2014-05-13
  • 打赏
  • 举报
回复
引用 1 楼 lliiqiang 的回复:
数组越界越得离谱了. count++之后判断加之前是否在范围之内,但是count已经加了,还<=长度,=长度就已经越界了,编程中数组从0开始计算是基本常识.程序里面用的count也是加了之后的count,完全错乱了.
我也这么觉得的,所以应该确认是书籍出问题了吧?
jikeizod 2014-05-13
  • 打赏
  • 举报
回复
沙发,哈哈,不懂
tony4geek 2014-05-13
  • 打赏
  • 举报
回复
就看到了。21天学通 哎。
lliiqiang 2014-05-13
  • 打赏
  • 举报
回复
数组越界越得离谱了. count++之后判断加之前是否在范围之内,但是count已经加了,还<=长度,=长度就已经越界了,编程中数组从0开始计算是基本常识.程序里面用的count也是加了之后的count,完全错乱了.
Monster27 2014-05-13
  • 打赏
  • 举报
回复
首先,这个题是有问题的,从截图部分代码可知: 1.目标为根据数组array1,产生数组array2。(特殊结束条件暂不考虑) 2.进入循环之前,创建了2个下标属性 count count2分别共2个数组使用。初始指向数组中第一个元素 3.进入循环体,第一个下表count在进行比较的同时执行了自增,判断完成该下标已移位。指向第一个数组的第二个元素。此时若进行赋值操作,将等同 array2[0] = array1[1]。 数组复制(参杂类型转换,特殊结束均为细节条件),第一要素就是下标对应。下表如果不一致,就算不报错,实现了最终结果也不会是预期结果。 int[] array1 = {2, 5, 6, 8, 2, 1, 3}; float[] array2 = new float[array1.length]; int count = 0; while(count <= array1.length){ if(array1[count] == 1){ break; } array2[count] = (float) array1[count]; count++; } System.out.println(Arrays.toString(array1) + " " + Arrays.toString(array2)); [2, 5, 6, 8, 2, 1, 3] [2.0, 5.0, 6.0, 8.0, 2.0, 0.0, 0.0]
二萌无双 2014-05-13
  • 打赏
  • 举报
回复
烂书List榜首。。。21天XXX 第二名 XXX从入门到精通 LZ THINKING IN JAVA才是正途啊。。。
vnvlyp 2014-05-13
  • 打赏
  • 举报
回复
这书写的什么破烂啊。。 光说array[count++] = XXX while (count++ <= array.length) 就是不值得提倡的风格,更不适合作为给新手看的范例,光这一点这书就可以扔了。。 其次这里明显数组越界错误,还有估计作者把continue和break都弄混了,下面的解释说只要有一个是1,就退出循环,那么应该说的是break,而代码中明明是continue 连范例代码中都有严重错误,还多达两三处,这书能看?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧