刷leetcode204时,质数计算,在看完改进算法后有个测试怎么也过不了,数据越界报错:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2146737495

仔细看都没有找到原因,其中最后两行输出为:

499813 499979  701  713
              -2146737495 499979  46349  46349

很纳闷,怎么突然从701跳到了46349,而且i*j<n也是验证过的,这个疑惑只在CSDN上找到这样一个问答:

请帮忙看一下这个程序为什么会产生这样的异常 [问题点数:20分]

没错,因为代码中没有对i和j进行限制,所以它们会一直增长,知道超过int边界,此时它们的乘积为负,负数当然是小于n,但是数组中肯定没有这样的地址!最后贴出问题代码供参考:

public class Solution204 {public int countPrimes(int n) {boolean isPrime[] = new boolean[n];for(int i = 0 ; i < n ; i++)isPrime[i] = true;int num = 0;for(int i = 2 ; i < n ; i++){if(!isPrime[i])continue;for(int j = i ; j*i < n ; j++) {System.out.println(j * i + " " + n + "  " + i + "  " + j);isPrime[j * i] = false;<span style="white-space:pre">    </span>//当i和j很大时,它们的乘积仍然符合n,但是产生了越界异常}}for(int i = 2 ; i < n ; i++)if(isPrime[i] == true)num++;return num;}public static void main(String[] args) {int n = new Solution204().countPrimes(499979);System.out.println(n);}
}

另外,关于Sieve找质数算法可以看看wiki:

wiki:Sieve of Eratosthenes

关于Java数组越界的一个诡异问题【leetcode204】相关推荐

  1. java数组越界异常并捕获_(Java)数组越界异常

    所以,我一直在为我的计算机科学课程编写一些代码来计算热指数.我有麻烦加载数据从文本文件,我被指示与该程序将要使用的数组一起工作.你看到的块被注释掉了,这是我正在尝试的另一个解决方案,它也不能工作... ...

  2. java 数组越界异常_数组越界异常 求解决!!!

    源自:4-3 滚动状态判断与处理 数组越界异常 求解决!!! package com.example.imooc; import java.io.BufferedInputStream; import ...

  3. java数组末尾添加元素_java数组添加元素,java数组如何添加一个元素

    java数组如何添加元素 向数组里添加一个元素怎么添加,这儿总结有三种方法: 1.一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度. 但有个可以改变大小的数组为ArrayLis ...

  4. java 数组 去掉第一个_java中数组的理解以及如何去掉断点

    数组也是对象 数组是放置相同类型的数据 数组里面放置的每一个变量都是有下标的. 数组的长度是确定的 数组的元素类型必须是相同的 数组类型可以是任何数据类型,包括基本类型和引用类型 数组变量属于引用类型 ...

  5. java 数组越界_JAVA 数组越界 怎么破

    Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:0atStudentTest.StudentTest ...

  6. java数组输出是地址_java数组输出 - SuperPcf的个人空间 - OSCHINA - 中文开源技术交流社区...

    java数组输出 输出一个数组中的元素,我们通常用for循环来做,比如: [java] view plaincopy在CODE上查看代码片派生到我的代码片 package test; public c ...

  7. java 缓冲区溢出_基于数组越界的缓冲区溢出

    上一篇文章说了函数调用时候的堆栈变化,这里就基于这个内容来验证一下基于数组越界的缓冲区溢出. 在c语言中,数组必须是静态的,也就是在定义的时候必须明确数组的大小,在根本上来说,这个是堆栈提升的原因,只 ...

  8. c语言放空一个数组,数组越界真可怕,莫名就闯到了别人家

    4本文引用地址:http://www.eepw.com.cn/article/201811/395096.htm 笔者曾经在<天灵灵地灵灵,遥控为何会失灵>一文中讲述过报文解析程序的一部分 ...

  9. java长度为100的数组_产生一个int数组,长度为100,并向其中随机插入1-100,不重复...

    #define RANDOM(X) (rand() % X + 1) int main() { //标志数组 int book[] = {}; int result[] = {}; //默认的随机数种 ...

  10. java 最大子数组_求一个数组中子数组的最大和算法(Java实现)

    前几天在微信订阅号"待字闺中"中看到的一篇文章<小技巧求一个数组中子数组的最大和>,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直接回复,但是发现 ...

最新文章

  1. 关于页面打印window.print()的样式问题
  2. PyCharm vs VSCode,是时候改变你的 IDE 了!
  3. 跨域以及一些解决方法
  4. 【 C 】作用域、链接属性、存储类型、static 关键字简介及总结
  5. 《转》 ImportError: No module named caffe 的解决方案
  6. 关于Session_End()运行机制的一些细节!
  7. linux wc -l 对io,linux设备驱动归纳总结(五):2.操作硬件——IO内存
  8. 将JSON数据转换成JAVA的实体类
  9. 广告中oCPX到底是如何进行优化的
  10. 微信社交小程序服务器,Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端...
  11. vmware linux 编译内核,VMWare编译linux内核的注意事项
  12. 基于Keras机器学习库的分类预测
  13. 内存数据集产生的隐性成本
  14. rocketmq 消息删除_RocketMQ 实现分布式事务,达到数据最终一致性
  15. 朱光潜:要有悲剧,才能算人生
  16. ssm-学子商城-项目第十二天
  17. ssm学生助学贷款系统毕业设计(附源码、运行环境)
  18. Line-in和Mic-in的区别和使用及Line-out
  19. 万用表——最详细使用教程
  20. 学计算机的怎样提升打字速度,如何提高打字速度:电脑键盘指法练习

热门文章

  1. 设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是
  2. clm5制作地表数据
  3. 计算机专业b 的考研大学,考研B区有哪些学校,前100位,计算机类
  4. 节后综合症的调整和对策
  5. (2021-07-20)EndNoteX9 导入期刊显示%J和et al.作者显示不全问题
  6. 【项目案例】前后端分离项目 【中小企业办公自动化管理系统 】SpringBoot + Vue + Element UI + Mysql
  7. 有规则的txt文件拆分
  8. ABB KUC711AE101 3BHB004661R0101 模块卡件
  9. 日期——贵州大学考研机试题目
  10. 重写-linux内存管理-伙伴分配器(二)内存碎片整理