java自定义类型数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java自定义类型数组相关的知识,希望对你有一定的参考价值。
自定义的类型,创建数据后,为什么不能给对象赋值呢。代码如下。
public class Student
String name;//对象的名称
public int [] Score;//成绩
//管理类
import java.util.*;
public class Manager
public void input(Student [] stus)
Scanner in = new Scanner(System.in);
for (int i = 0;i <stus.length;i++)
System.out .print("请输入"+(i+1)+"个学生的姓名:");
stus[i].name = in.next();
for (int j = 0;j<stus[0].Score.length;j++)
System.out.print("请输入第"+(i+1)+"门成绩的分数:");
stus[i].Score[j] = in.nextInt();;
public static void main(String [] args)
Scanner in = new Scanner(System.in);
System.out.print("请输入学生人数:");
int Sl = in.nextInt();
Student [] stus = new Student[Sl];
Manager manager = new Manager();
manager.input(stus);
1. Student的对象都没有初始化,因为你只创建了数组对象,而数组的每个元素都为null,所以你运行的时候会抛出空指针异常。
2. 你的Student类里面的score属性,也定义成了数组类型,但是你没有对这个属性初始化,在下面给课程分数赋值的时候必然会出错。追问
Student数组的初始化该怎么表示呢,求解
追答嗯,这么来吧,我给你写个实例,你看看能懂我的意思不。
Student[] stu = new Student[2] ;
stu[0] = new Student() ; //当然这里按照构造函数来实现
stu[1] = new Student() ;
stu[0] = new Student() ; //这样是把Student的属性给stu[1]?
Student[] stu = new Student[2] ;//新造个数组后,里面带的是什么类型的属性呢?
Student[] stu = new Student[2] ; //
上面这句代码只是创建了一个数组对象,这个数组你就想像成一个容易,可以放两个学生,但是我现在只是创建了这个容器,里面什么也没放,你不相信我的话,那么你可以打印一下,肯定都是null。所以就需要下面的语句,给这个数组装对象。
stu[0] = new Student() ; //当然这里按照构造函数来实现
stu[1] = new Student() ;
String name;//对象的名称
public int [] Score=new int[2];//成绩,这里有几个成绩写成几个,或者就传一个
public String getName()
return name;
public void setName(String name)
this.name = name;
public int[] getScore()
return Score;
public void setScore(int[] score)
Score = score;
import java.util.*;
public class Manager
public void input(Student[] stus)
Scanner in = new Scanner(System.in);
for (int i = 0;i <stus.length;i++)
System.out .println("请输入"+(i+1)+"个学生的姓名:");
stus[i].setName(in.next());
for (int j = 0;j<stus[0].Score.length;j++)
System.out.println("请输入第"+(i+1)+"门成绩的分数:");
stus[i].getScore()[j] = in.nextInt();
public static void main(String [] args)
Scanner in = new Scanner(System.in);
System.out.println("请输入学生人数:");
int Sl = in.nextInt();
Student [] stus = new Student[Sl];
for (int i = 0; i < stus.length; i++)
stus[i]=new Student();
Manager manager = new Manager();
manager.input(stus);
Java数组总结
1.数组的基本概念及作用:数组是相同数据类型元素的集合,数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,也可以存储引用数据类型。
例如:int [] a = new int []{1,2,3,4,5};
String [] s = new String []{"小熊","小小熊","小小小熊"};
Employee [] e=new Employee[10];(Employee是自定义类)
2.数组的声明:数组的声明的两种方式(一般用第一种):
①数据类型 [] 数组名字 例如:int [] a;
②数据类型 数组的名字 [] 例如: int a [];
3.数组的创建:数组创建的三种方式:
①声明数组的同时,根据指定的长度分配内存,但数组中元素值都为默认的初始化值。例如:char[] chAry = new char[10];
②明数组并分配内存,同时将其初始化。例如:int[] ary1 = new int[]{1, 2, 3, 4, 5};
③与前一种方式相同,仅仅只是语法相对简略。例如:int[] ary2 = {1, 2, 3, 4, 5};
4.数组的长度:length属性。例如:int [] b1 = new int []{1,2,3,4,5,6,7};
System.out.println(b1.length);
①创建数组的时候必须指定数组的长度,而且一经定义则不允许改变。
②数组的长度虽然是7,但是在内存中实际给8个位置,另外一个存储7。
5.数组之间的赋值:直接赋值,但实际得到的效果是两个数组引用指向同一块内存。
6.数组的访问:数组名字[索引] 例如:a[2];
注意:①数组的索引从0开始。
②索引的数据类型是整型。
③索引最大值和数组长度始终差1。
7.数组的迭代:有两种方式。例如:
int [] b1 = new int []{1,2,3,4,5,6,7};
第一种:for循环进行数组的迭代。
for(int i =0;i<b1.length;i++){
System.out.println(b1[i]);
}
第二种:增强for循环进行数组的迭代。
for(int x:b1){
System.out.println(x);
}
8.多维数组的声明:有三种方式:①int [][] a; ②int []a1[]; ③int a2[][];
9.多维数组的迭代:int [][] b1 = new int [][]{{1,2},{3,4}};
for(int i =0;i<b1.length;i++){
for(int j =0;j<b1[i].length;j++){
System.out.print(b1[i][j]);
}
}
10.数组的拷贝:arraycopy(Object src1, int srcPos, Object src2, int destPos, int length)
从指定源数组src1中复制一个数组,复制从指定的位置srcPos开始,到目标数组src2的指定位置结束。
例如: int[] a={10,100,1000};
int[] b={20,200,2000,20000};
System.arraycopy(a, 1, b, 2, 2);
for(int x:b){
System.out.println(x);
}
输出结果为:20 200 100 1000
11.数组的特点:①数组是引用数据类型;
②数组是存储相同数据类型的集合;
③数组的下标从0开始。
④优点:越界检查、通用算法;
⑤缺点:长度一经定义不能改变。
以上是关于java自定义类型数组的主要内容,如果未能解决你的问题,请参考以下文章