解决方案 »

  1.   

    数组越界越得离谱了.
    count++之后判断加之前是否在范围之内,但是count已经加了,还<=长度,=长度就已经越界了,编程中数组从0开始计算是基本常识.程序里面用的count也是加了之后的count,完全错乱了.
      

  2.   

    我也这么觉得的,所以应该确认是书籍出问题了吧?
    我想理解的就是count++的赋值范围,一般count++是在先使用再++,那么它的使用范围到底是到哪里停止呢?是说这语句在整个while执行之后回滚++,还是说如果这部分先++了再执行下面的程序呢?比如,int j=count++;那j的值应该还是为0吧?
      

  3.   

    这本书好像是国外的人写的,我查了下最新的java6原版,也是这个问题,我总觉得应该不至于出现这么低级的错误,而且count++的值确实是使用之后再赋值,原则上只是<=那里似乎有点问题,语句这样写应该是可以的,但是好像即使<=改为<还是溢出,我调试了下,溢出的原因应该在count2上了好像~
      

  4.   

    我也这么觉得的,所以应该确认是书籍出问题了吧?
    我想理解的就是count++的赋值范围,一般count++是在先使用再++,那么它的使用范围到底是到哪里停止呢?是说这语句在整个while执行之后回滚++,还是说如果这部分先++了再执行下面的程序呢?比如,int j=count++;那j的值应该还是为0吧?
    还有个问题:就是如果
      打印值是从1开始的;
    如果
     打印值就从0开始了;确实有点不太理解,大神能不能指导下呀?
      

  5.   

    这书写的什么破烂啊。。
    光说array[count++] = XXX
    while (count++ <= array.length)
    就是不值得提倡的风格,更不适合作为给新手看的范例,光这一点这书就可以扔了。。其次这里明显数组越界错误,还有估计作者把continue和break都弄混了,下面的解释说只要有一个是1,就退出循环,那么应该说的是break,而代码中明明是continue连范例代码中都有严重错误,还多达两三处,这书能看?
      

  6.   

    烂书List榜首21天XXX
    第二名 XXX从入门到精通
    LZ THINKING IN JAVA才是正途啊
      

  7.   

    首先,这个题是有问题的,从截图部分代码可知:
    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]
      

  8.   

    我了个擦,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++;
    }