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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱 高级黑马   /  2013-11-7 11:57  /  2161 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 完美恋爱 于 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)
请问 这段提示是什么意思啊?
请帮忙解答这两个问题,谢谢啦!

评分

参与人数 2技术分 +2 收起 理由
乔兵 + 1
黄炳期 + 1

查看全部评分

17 个回复

倒序浏览
你的错误提示的意思是除0错误
回复 使用道具 举报
敗唫①輩ふ 发表于 2013-11-7 12:07
你的错误提示的意思是除0错误

可是这里的i不可能等于0啊
回复 使用道具 举报
敗唫①輩ふ 发表于 2013-11-7 12:07
你的错误提示的意思是除0错误

可是这里的i不可能等于0啊!
回复 使用道具 举报
完美恋爱 发表于 2013-11-7 12:21
可是这里的i不可能等于0啊!

我也不大清楚哪里错了,但是提示错误是那个意思。你最后一行代码是不是问题?
回复 使用道具 举报
本帖最后由 hll 于 2013-11-7 12:40 编辑

看看。。。。。。。。。。。。。。。。
回复 使用道具 举报
观决 中级黑马 2013-11-7 12:46:17
7#
亲 我想说 你这个应该不会结束吧 因为sum是int型 那个1/i除了一个1,后面的都是0  sum一直是1  额....
回复 使用道具 举报
观决 中级黑马 2013-11-7 12:48:48
8#
还有因为那个涉及了异常  因为除法是有可能被除数是0  所以还要异常处理一下 ,就算知道不会发生 也要异常处理异常 .......处理异常后 这个程序应该是一直会运行下....不会满足结束条件....

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
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多亿的循环,够你跑好一阵子的了

评分

参与人数 2技术分 +2 收起 理由
黄炳期 + 1
乔兵 + 1

查看全部评分

回复 使用道具 举报
你for循环里面限定循环次数的条件怎么没有啊for(i = 1; ;i++)
回复 使用道具 举报
Gump 中级黑马 2013-11-7 13:21:06
11#

  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++)

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
  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:15
13#
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:23
14#
朋友,你好!你看因为代码中for循环是无限循环的,也就是说你这个程序不会结束。关键是i每自增一后,if语句就开始执行,好的问题就出现了,因为i是int型整数,是有最大值的,超过最大值后再自增就变成了int最大负数,接着自增,直到i自增为0,if代码块再执行时就出现算术异常,

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
忄雾飞扬 来自手机 中级黑马 2013-11-7 15:57:20
15#
手机码字,所以不太整齐,你把程序改下,就可以直观的看到问题所在了,具体如下,,,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:32
16#
手机码字,所以不太整齐,你把程序改下,就可以直观的看到问题所在了,具体如下,,,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)}
回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马