黑马程序员技术交流社区

标题: 请看看这段代码哪里错啦? [打印本页]

作者: 完美恋爱    时间: 2013-11-7 11:57
标题: 请看看这段代码哪里错啦?
本帖最后由 完美恋爱 于 2013-11-7 18:35 编辑

class Demo
{
        public static void main(String[] args)
        {
                int sum = 0;
                int i;
                for(i = 1; ;i++)
                {
                        if(sum <= 10)
                        {
                                sum = sum + 1/i;
                        }
                        else
                                break;
                }
               
                System.out.println("i = "+i);
        }
}

请问这段代码哪里有错误啊?
错误提示是:Exception in thread "main" java.lang.ArithmeticException: / by zero
                     at Demo.main(Demo.java:287)
请问 这段提示是什么意思啊?
请帮忙解答这两个问题,谢谢啦!


作者: 敗唫①輩ふ    时间: 2013-11-7 12:07
你的错误提示的意思是除0错误
作者: 完美恋爱    时间: 2013-11-7 12:20
敗唫①輩ふ 发表于 2013-11-7 12:07
你的错误提示的意思是除0错误

可是这里的i不可能等于0啊
作者: 完美恋爱    时间: 2013-11-7 12:21
敗唫①輩ふ 发表于 2013-11-7 12:07
你的错误提示的意思是除0错误

可是这里的i不可能等于0啊!
作者: 敗唫①輩ふ    时间: 2013-11-7 12:24
完美恋爱 发表于 2013-11-7 12:21
可是这里的i不可能等于0啊!

我也不大清楚哪里错了,但是提示错误是那个意思。你最后一行代码是不是问题?
作者: hll    时间: 2013-11-7 12:38
本帖最后由 hll 于 2013-11-7 12:40 编辑

看看。。。。。。。。。。。。。。。。
作者: 观决    时间: 2013-11-7 12:46
亲 我想说 你这个应该不会结束吧 因为sum是int型 那个1/i除了一个1,后面的都是0  sum一直是1  额....
作者: 观决    时间: 2013-11-7 12:48
还有因为那个涉及了异常  因为除法是有可能被除数是0  所以还要异常处理一下 ,就算知道不会发生 也要异常处理异常 .......处理异常后 这个程序应该是一直会运行下....不会满足结束条件....
作者: 零下五度的水    时间: 2013-11-7 12:57
sum = sum + 1/i;
因为循环条件是 i=1, i++;
i=1时 sum = 0+1=1;
之后i>1, 1/i == 0, 所以 sum == 1
直到i == Integer.MAX_VALUE;
之后i++; i==Integer.MIN_VALUE;
然后i就从负数一直自增,所以 i 必然是有为 0 的时候的
不过这是个40多亿的循环,够你跑好一阵子的了
作者: 高境    时间: 2013-11-7 13:07
你for循环里面限定循环次数的条件怎么没有啊for(i = 1; ;i++)
作者: Gump    时间: 2013-11-7 13:21

  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int sum = 0;
  6.                 int i;
  7.                 for(i = 1;i<10;i++)
  8.                 {
  9.                         if(sum <= 10)
  10.                         {
  11.                                 sum = sum + 1/i;
  12.                         }
  13.                         else
  14.                                 break;
  15.                 }
  16.                
  17.                 System.out.println("i = "+i+sum);
  18.         }
  19. }
复制代码
不明白你要表达什么意思,我根据我的猜想,给你改了一下你的代码,你最大的问题就是for(i = 1; ;i++),里面要有循环次数,例如for(i = 1; i<10;i++)
作者: 魏-玉-彪    时间: 2013-11-7 13:25
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int sum = 0;
  6.                 int i;
  7.                 for(i = 1; ;i++)                             //看此处,循环条件没有,没法循环  for(i = 1;i<100;i++)   
  8.                 {
  9.                         if(sum <= 10)
  10.                         {
  11.                                 sum = sum + 1/i;
  12.                         }
  13.                         else
  14.                                 break;
  15.                 }
  16.                
  17.                 System.out.println("i = "+i);
  18.         }
  19. }
复制代码
且不说,程序有没有意义,只是for(i = 1; ;i++)   就无法开始


作者: Gump    时间: 2013-11-7 13:31
Gump 发表于 2013-11-7 13:21
不明白你要表达什么意思,我根据我的猜想,给你改了一下你的代码,你最大的问题就是for(i = 1; ;i++),里面 ...

byzore报错是,除零报错,你没有限定循环次数,说以int i 默认值是0,sum = sum + 1/i  ,1/i就除数为零了
作者: 忄雾飞扬    时间: 2013-11-7 15:45
朋友,你好!你看因为代码中for循环是无限循环的,也就是说你这个程序不会结束。关键是i每自增一后,if语句就开始执行,好的问题就出现了,因为i是int型整数,是有最大值的,超过最大值后再自增就变成了int最大负数,接着自增,直到i自增为0,if代码块再执行时就出现算术异常,
作者: 忄雾飞扬    时间: 2013-11-7 15:57
手机码字,所以不太整齐,你把程序改下,就可以直观的看到问题所在了,具体如下,,,byte sum=0;byte i;for(i=1;;i++   )   system.out.println(i);if(sum<=10){system.out.println(i);sum=(byte)(sum+1/i)}
作者: 忄雾飞扬    时间: 2013-11-7 15:57
手机码字,所以不太整齐,你把程序改下,就可以直观的看到问题所在了,具体如下,,,byte sum=0;byte i;for(i=1;;i++   )   system.out.println(i);if(sum<=10){system.out.println(i);sum=(byte)(sum+1/i)}
作者: 黄炳期    时间: 2013-11-7 16:30
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2