各位大佬,这个数组越界是什么原因?

[复制链接]
查看11 | 回复5 | 2021-1-27 05:42:40 | 显示全部楼层 |阅读模式
importjava.util.*;



分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:42:40 | 显示全部楼层
在n=in.nextInt();之后追加
a=newint[n];
你肯定觉得你的a是static,而且一开始就new过了,为什么还需要重新new?
如果你能理解以下的代码就明白为什么了。
intn=0;
inta[]=newint[n];//a的长度是多少?
intb=n;//b是多少?
n=5;//改变n后b变了吗?a的长度变了吗?

回复

使用道具 举报

千问 | 2021-1-27 05:42:40 | 显示全部楼层
引用楼主闲、路人的回复:importjava.util.*;
静态就做一次,这个是常识,静态在类载入时就做过了。
你不会以为,每次n改变a[]数组都会重新new吧!
程序改为
staticintn;
staticinta[];
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
inti,j,t;
Scannerin=newScanner(System.in);
n=in.nextInt();
a=newint[n];

}

回复

使用道具 举报

千问 | 2021-1-27 05:42:40 | 显示全部楼层
应该是a[]数组接受了2个重复n(一组数)
把数组长度改为2n试试
回复

使用道具 举报

千问 | 2021-1-27 05:42:40 | 显示全部楼层
引用1楼qybao的回复:在n=in.nextInt();之后追加
a=newint[n];
你肯定觉得你的a是static,而且一开始就new过了,为什么还需要重新new?
如果你能理解以下的代码就明白为什么了。
intn=0;
inta[]=newint[n];//a的长度是多少?
intb=n;//b是多少?
n=5;//改变n后b变了吗?a的长度变了吗?

哦哦,懂了,谢谢大佬
回复

使用道具 举报

千问 | 2021-1-27 05:42:40 | 显示全部楼层
静态局部变量只能初始化一次
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行