A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王青山 于 2011-12-9 12:42 编辑

/*
题目:1-100之间7的倍数的个数。并打印。

我的思路:把7的倍数定义为变量X,让7与它的倍数相乘小于100。然后输出X的个数。

问题:正确的结果应该是14.但我输出的结果是15.有点不理解。
          我想问问我这个方法可行么?有什么能改进的地方?
*/


//代码如下


          class for_test
          {
                        public static void main(String[]args)
                        {
                                int x=1;
                                while(x*7<100)                        
                                 {
                                         x++;
                                 }
                                 System.out.println("x="+x);                        
                        }       
          }

点评

/* * 兄弟你的思路真确,但是没有控制好流程,在自加之前,应该把7的倍数给打印出来! * */ public class ForTest { /** * @param args */ public static void ma   发表于 2011-12-8 14:29

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 周胜 于 2011-12-8 15:43 编辑

兄弟,类名要大写,你写的程序可以但是在x=14时候14*7=98<100在循环体里面x自加1为15了,在输出语句前面加个x--就行了。下面是我写的另一种。
class ForTest
{
    public static void main(String[] args)
    {
       int j = 0;
        for (int i=1; i<=100; i++) {
                if(i%7 == 0) {         //求余 余数为0说明能整除
                        j++;        //计数
              System.out.println(i);    //打印输出验证
                }
                       
        }
        System.out.println(j);    //打印J
                                 
    }        
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
你写的程序思路有点不对,当x=14时,14*7<100,所以还是会执行while(){}内的语句块,x++,此时x的值为15。
下面是按我自己的思路写的一个程序你看下:
class App {
        public static void main(String[] args) {
                int x = 0;
                for(int i=1;i<=100;i++){
                        if(0==i%7){  //如果i的模7为0则表示i可以被7整除,即是7的倍数。
                           x++;         //然后x++,否则不予处理。
                        }
                }
                System.out.println("x=" + x);
        }
}

输出结果为:14.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
你写程序的思路是完全正确定的,但是,之所以会出错,是因为你没有处理好临界问题
这是你的代码
   while(x*7<100)                        
       {
         x++;
       }
当程序执行到14时,14*7=98<100,所以,会继续执行while循环,当x=15时,while循环才结束,所以,你得到的结果会比原值大1,所以,你在System.out.println()前在加上x--就可以了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
class  Demo
{
        public static void main(String[] args)
        {
                for (int i =1;i<=100 ;i++ )
                {
                        if (i%7==0)
                        {
                                System.out.println(i);
                        }
                }
        }
}
回复 使用道具 举报
class  Demo
{
        public static void main(String[] args)
        {
int x=0;
                for (int i =1;i<=100 ;i++ )
                {
                        if (i%7==0)
                        {
x++;
                                                        }
                }
System.out.println(x);
        }
}
刚才看错了 以为要输出1-100中7的倍数   

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
对,看来以后处理问题要多多考虑临界问题啊!我决得楼主的算法不错的,计算次数少很多,效率高些,只需输出时用 - - x 就可以了。
{:soso_e183:}受教了,临界,临界,以后多多注意!
回复 使用道具 举报
李建锋 黑马帝 2011-12-8 14:30:03
8#
本帖最后由 李建锋 于 2011-12-8 14:53 编辑

/*
* 兄弟你的思路有一点小问题,就是在必须在打印之前,必须自减一次,因为最后一次循环在自加之后已经超出了范围!下面的算法效率应该高一点
/*吧!

*
*/
public class ForTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int x=1;//用来表示7的倍数

                  int j=0;//用来计数
                while(x*7<100)
                {
                       
                        x++;
                                            
                }
                x--
                System.out.println(x);
               
        }

}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
王青山 来自手机 黑马帝 2011-12-8 22:36:05
9#
谢谢各位的帮助。我会注意类名大写的。另外我想想问问七楼:“int j=0;”怎么实现计数,我有点菜,见谅
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马