Java数组越界问题实例解析

网友投稿 270 2023-03-22


Java数组越界问题实例解析

java中数组初始化和OC其实是一样的,分为动态初始化和静态初始化,

动态初始化:指定长度,由系统给出初始化值

静态初始化:给出初始化值,由系统给出长度

在我们使用数组时最容易出现的就是数组越界问题,好了,这里有个简单的例子

int [][] array = {{1,2,3},{1,4}};

System.out.println(array[1][2]);

这是一个二维数组,很明显,数组越界了,控制台中会打印如下信息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

at demo.Array.main(Array.java:31)

很准确的定位到31行。

下面看看一个完整的代码示例:

package home_work_4_17;

abstract class Employee{

abstract double earnings();

}

class YearWorker extends Employee{

double earnings(){

System.out.println("按年领取1000");

return 1000;

}

}

class MonthWorker extends Employee{

double earnings(){

System.out.println("按月领取100");

return 100;

}

}

class WeekWorker extends Employee{

double earnings(){

System.out.println("按星期领取10");

return 10;

}

}

class Company{

int n;

//该公司的人数

public Company(int n) {

this.n=n;

// TODO Auto-generated constructor stub

}

Employee E[]=new Employee[n];

double cal(){

//返回薪水综合

double sum=0;

for (int j=0;j

sum+=E[j].earnings();

}

return sum;

}

}

public class work_2 {

public static void main(String args[]) {

Company c=new Company(3);

c.E[0]=new WeekWorker();

c.E[1]=new MonthWorker();

c.E[2]=new YearWorker();

System.out.println("总支出:"+c.cal());

}

}

编译器显示数组越界错误。

经检查发现划线部分语句出错

应当做如下修改:

class Company{

int n; //该公司的人数

Employee E[];

public Company(int n) {

this.n=n;// TODO Auto-generated constructor stub

E=new Employee[n];

}

double cal(){ //返回薪水综合

double sum=0;

for(int j=0;j

sum+=E[j].earnings();

}

return sum;

}

}

出错原因是:当Company构造方法中并未对数组E进行初始化操作,故而E数组大小仍然为0,发生数组越界错误。

利用上述错误方式编写的测试程序如下:

package test_a;

class people{

int n;

Student s[]=new Student[n];

public people(int n) {

this.n=n;// TODO Auto-generated constructor stub

}

}

class Student{

int number;

}

public class Cdcs {

public static void main(String args[]) {

people p=new people(3);

System.out.println(p.s.length);

}

}

输出结果为0。即数组大小为零。

总结

以上就是本文关于Java数组越界问题实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Java异常退出条件的判断示例代码、Java编程异常处理最佳实践【推荐】等。有什么问题可以随时留言,会及时回复大家的。

sum+=E[j].earnings();

}

return sum;

}

}

public class work_2 {

public static void main(String args[]) {

Company c=new Company(3);

c.E[0]=new WeekWorker();

c.E[1]=new MonthWorker();

c.E[2]=new YearWorker();

System.out.println("总支出:"+c.cal());

}

}

编译器显示数组越界错误。

经检查发现划线部分语句出错

应当做如下修改:

class Company{

int n; //该公司的人数

Employee E[];

public Company(int n) {

this.n=n;// TODO Auto-generated constructor stub

E=new Employee[n];

}

double cal(){ //返回薪水综合

double sum=0;

for(int j=0;j

sum+=E[j].earnings();

}

return sum;

}

}

出错原因是:当Company构造方法中并未对数组E进行初始化操作,故而E数组大小仍然为0,发生数组越界错误。

利用上述错误方式编写的测试程序如下:

package test_a;

class people{

int n;

Student s[]=new Student[n];

public people(int n) {

this.n=n;// TODO Auto-generated constructor stub

}

}

class Student{

int number;

}

public class Cdcs {

public static void main(String args[]) {

people p=new people(3);

System.out.println(p.s.length);

}

}

输出结果为0。即数组大小为零。

总结

以上就是本文关于Java数组越界问题实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Java异常退出条件的判断示例代码、Java编程异常处理最佳实践【推荐】等。有什么问题可以随时留言,会及时回复大家的。

sum+=E[j].earnings();

}

return sum;

}

}

出错原因是:当Company构造方法中并未对数组E进行初始化操作,故而E数组大小仍然为0,发生数组越界错误。

利用上述错误方式编写的测试程序如下:

package test_a;

class people{

int n;

Student s[]=new Student[n];

public people(int n) {

this.n=n;// TODO Auto-generated constructor stub

}

}

class Student{

int number;

}

public class Cdcs {

public static void main(String args[]) {

people p=new people(3);

System.out.println(p.s.length);

}

}

输出结果为0。即数组大小为零。

总结

以上就是本文关于Java数组越界问题实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Java异常退出条件的判断示例代码、Java编程异常处理最佳实践【推荐】等。有什么问题可以随时留言,会及时回复大家的。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:登录接口性能测试用例(用户登录接口测试)
下一篇:ctp接口开发(ctp python 接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~