关于Java数组越界的一个诡异问题【leetcode204】
刷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】相关推荐
- java数组越界异常并捕获_(Java)数组越界异常
所以,我一直在为我的计算机科学课程编写一些代码来计算热指数.我有麻烦加载数据从文本文件,我被指示与该程序将要使用的数组一起工作.你看到的块被注释掉了,这是我正在尝试的另一个解决方案,它也不能工作... ...
- java 数组越界异常_数组越界异常 求解决!!!
源自:4-3 滚动状态判断与处理 数组越界异常 求解决!!! package com.example.imooc; import java.io.BufferedInputStream; import ...
- java数组末尾添加元素_java数组添加元素,java数组如何添加一个元素
java数组如何添加元素 向数组里添加一个元素怎么添加,这儿总结有三种方法: 1.一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度. 但有个可以改变大小的数组为ArrayLis ...
- java 数组 去掉第一个_java中数组的理解以及如何去掉断点
数组也是对象 数组是放置相同类型的数据 数组里面放置的每一个变量都是有下标的. 数组的长度是确定的 数组的元素类型必须是相同的 数组类型可以是任何数据类型,包括基本类型和引用类型 数组变量属于引用类型 ...
- java 数组越界_JAVA 数组越界 怎么破
Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:0atStudentTest.StudentTest ...
- java数组输出是地址_java数组输出 - SuperPcf的个人空间 - OSCHINA - 中文开源技术交流社区...
java数组输出 输出一个数组中的元素,我们通常用for循环来做,比如: [java] view plaincopy在CODE上查看代码片派生到我的代码片 package test; public c ...
- java 缓冲区溢出_基于数组越界的缓冲区溢出
上一篇文章说了函数调用时候的堆栈变化,这里就基于这个内容来验证一下基于数组越界的缓冲区溢出. 在c语言中,数组必须是静态的,也就是在定义的时候必须明确数组的大小,在根本上来说,这个是堆栈提升的原因,只 ...
- c语言放空一个数组,数组越界真可怕,莫名就闯到了别人家
4本文引用地址:http://www.eepw.com.cn/article/201811/395096.htm 笔者曾经在<天灵灵地灵灵,遥控为何会失灵>一文中讲述过报文解析程序的一部分 ...
- java长度为100的数组_产生一个int数组,长度为100,并向其中随机插入1-100,不重复...
#define RANDOM(X) (rand() % X + 1) int main() { //标志数组 int book[] = {}; int result[] = {}; //默认的随机数种 ...
- java 最大子数组_求一个数组中子数组的最大和算法(Java实现)
前几天在微信订阅号"待字闺中"中看到的一篇文章<小技巧求一个数组中子数组的最大和>,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直接回复,但是发现 ...
最新文章
- 关于页面打印window.print()的样式问题
- PyCharm vs VSCode,是时候改变你的 IDE 了!
- 跨域以及一些解决方法
- 【 C 】作用域、链接属性、存储类型、static 关键字简介及总结
- 《转》 ImportError: No module named caffe 的解决方案
- 关于Session_End()运行机制的一些细节!
- linux wc -l 对io,linux设备驱动归纳总结(五):2.操作硬件——IO内存
- 将JSON数据转换成JAVA的实体类
- 广告中oCPX到底是如何进行优化的
- 微信社交小程序服务器,Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端...
- vmware linux 编译内核,VMWare编译linux内核的注意事项
- 基于Keras机器学习库的分类预测
- 内存数据集产生的隐性成本
- rocketmq 消息删除_RocketMQ 实现分布式事务,达到数据最终一致性
- 朱光潜:要有悲剧,才能算人生
- ssm-学子商城-项目第十二天
- ssm学生助学贷款系统毕业设计(附源码、运行环境)
- Line-in和Mic-in的区别和使用及Line-out
- 万用表——最详细使用教程
- 学计算机的怎样提升打字速度,如何提高打字速度:电脑键盘指法练习
热门文章
- 设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是
- clm5制作地表数据
- 计算机专业b 的考研大学,考研B区有哪些学校,前100位,计算机类
- 节后综合症的调整和对策
- (2021-07-20)EndNoteX9 导入期刊显示%J和et al.作者显示不全问题
- 【项目案例】前后端分离项目 【中小企业办公自动化管理系统 】SpringBoot + Vue + Element UI + Mysql
- 有规则的txt文件拆分
- ABB KUC711AE101 3BHB004661R0101 模块卡件
- 日期——贵州大学考研机试题目
- 重写-linux内存管理-伙伴分配器(二)内存碎片整理