返回列表 回复 发帖

关于Java入门123第87页“循环嵌套”代码的问题。

尊敬的版主及版内各位同好,你们好~!
我是一个JAVA新手,在学习《JAVA入门123》这本书时,第87页的一个例子引起了我的疑问,主要表现如下:
在这一章里,主要是讲转向语句及循环语句的,我记得以前看过的其他编程呢,循环语句中的前加加与后加加或前减减与后减减的运行次数是不一样的,但我在这一章里没有看到有方面的区别的论述,然后,在运行第87页最下面一段程序时,我有些疑惑,所以,就自己练习了这个程序,为了直观,我对书上的程序做了修改,代码如下:
public class NestingLoop {
        public static void main(String[] args) {
                int biggerThan = 10051005;
                int n = 0;
                int squareSum = 0;
                while (squareSum <= biggerThan) {
                        n++;
                        squareSum = 0;
                        for (int i = 0;i <= n;i++) {
                                int squareValue = i + i;
                                squareSum = squareSum + squareValue;
                                System.out.println(n +"\t"+squareSum);
                        }
                }
                System.out.println("平方和大于"+biggerThan+"的最小整数值为:"+n);
        }

}
运行结果是3170,这与书上的结果不同,为了验证运算结果是否正确,我又另写了一段程序(有点粗糙,汗~!),代码如下:
public class NweNestingLoop {
        public static void main(String[] args) {
        int n = 1;
                for ( n=0;n<=3170;++n){
                int squareSum = 0;
                int squareValu = 0;
                squareValu = n*n;
                squareSum =squareSum + squareValu;
                System.out.println(n +"\t"+squareSum);
                }
        }

}
运行结果是,从0到3170的平方和是10048900,小于10051005,也就是说,前一例正确的答案应当是3171。
我不知道是我的程序有问题,或者是正确的数就应当是3171,所以,特意上这个网站来注册了请教各位,请各位不吝以教~!
谢谢各位先~!
奇怪,第90页的代码段输入结果确实是311,倒底是哪儿出了问题了?
附:第90页代码段:
public class UsingBreakInWhileTrue {
        public static void main(String[] args) {
                int biggerThan = 10051005;
                int n = 0;
                int squareSum = 0 ;
                while (true) {
                        int square = n * n;
                        squareSum =squareSum +square;
                        if (squareSum > biggerThan) {
                                break;
                        }else {
                                n++;
                        }
                }
                System.out.println("平方和大于"+biggerThan + "的最小整数值为:"+n);
        }

}
原来,第87页的int squareValue = i + i;处应当是int squareValue = i * i;,可是,那我第二段代码又错在哪儿了呢?
原来,第87页的int squareValue = i + i;处应当是int squareValue = i * i;,可是,那我第二段代码又错在哪儿了呢?
wangqing 发表于 2011-7-9 18:15
用n<=3171试试看。
第二段里我用3171试过结果是会大于10051005,但这与1到311的平方和大于10051005不相符啊~!不合乎逻辑~!
4# deepnighttwo


谢谢你的提示,但是:第二段里我用3171试过结果是会大于10051005,但这与1到311的平方和大于10051005不相符啊~!不合乎逻辑~!
返回列表