java一维数组的定义方式(java定义一个一维数组)

admin 478 0

各位老铁们好,相信很多人对java一维数组的定义方式都不是特别的了解,因此呢,今天就来为大家分享下关于java一维数组的定义方式以及java定义一个一维数组的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

一、java中怎么数组初始化

1、int[] a=new int[5];//初始化为默认值,int型为0

2、int[] a=new int[]{1,2,3,4,5};//同(3)

3、int[] a=new int[5]{1,2,3,4,5};

4、//错误,如果提供了数组初始化操作,则不能定义维表达式

5、a={1,2,3,4,5};//错误数组常量只能在初始化操作中使用,如(3)

6、//错误,因为数组没有初始化,不能赋值a[1]=2;二维数组

7、int[][] a={{1,2},{2,3},{3,4}};

8、int[][] a={{1,2},{2,3},{3,4,5}};

9、//没有错,数组空间不是连续分配的,所以不要求每一维的大小相同

10、//a[0]其实就是一个数组a[1]=new int[4];

二、Java定义一个一维数组有哪几种方法

int[]ary1;//Java推荐的数组声明方式

intary2[];//不推荐,但也是正确的,C语言等使用这种方式

其次:声明的声明和赋值

int[]ary1={1,2,3};//声明的时候,同时赋值

int[]ary2=newint[3];//指定数组的长度为3

ary2[0]=1;//数组下标从0开始,依次给每个元素赋值

int[]ary3=newint[]{1,2,3};//注意,这里的newint[]方框里不能指定长度

最后:注意数组的默认值;

简单数据类型,比如boolean类型的数组,默认值就是false, int类型的数组,默认值就是0.

对象类型的数组,比如Boolean类型的数组,默认值是null,Integer类型的数组,默认值还是null

System.out.println(ary1[0]);//输出0

System.out.println(ary2[0]);//输出null

System.out.println(b1[0]);//输出false

System.out.println(b2[0]);//输出null

三、怎样用java定义一个int数组

数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组

数据的有点不使用数组定义100个整形变量:int i1;int i2;int i3

数组定义:int i[100];只是一个伪代码,只是表示含义的

一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的,

使用java数组,必须经过两个步骤,声明数组和分配内存给该数组,

声明一维数组:数据类型数组名[]=null;

非配内存给数组:数组名=new数据类型[长度];

声明一维数组:数据类型 []数组名=null;

int、long操作的时候本身就是具体的内容

引用传递的就是一个内存的使用权,一块内存空间,可能有多个人同时使用

数组的声明格式里,数据类型是数组元素的数据类型,常见的有整形、浮点型、与字符型等

数组名是用来统一这组相同数据类型元素的名称,其命名规则和变量的相同

数组声明后实际上是在栈内存中保存了此数组的名称,结下了是要在堆内存中配置数组所需要的内存,齐产固定是告诉编译器,所声明的数组要存放多少个元素,而new则是命令编译器根据括号里的长度。

基本数据类型偶读有其默认值:int 0;只要是引用数据类型默认值就是null事例

数据类型数组名[]=new数据类型[个数]

声明一个元素个数为10的整形数组score,同时开辟依靠内存空间工期使用

java中,由于整形数据类型占用的空间为4个byte,而整个数组score可保存的元素有10个。所以上例中占用的内存共有4*10=40个字节

想要访问数组里的元素可以利用索引来完成,java的数组索引标号由10开始,以一个score[10]的整形数组为例,score[0]代表第一个元素

在java中取得数组的长度(也就是数组元素的长度)可以利用数组名称.length完成,

数组名称.length--返回一个int类型的数据

之前的数组,所采用的都是动态初始化,所有的内容在数组声明的时候并不具体的指定,而是以默认值的形式出现

静态初始化是指在数组声明后直接为数组指定具体的内容

如果想要直接在声明的时候给数组赋初始值,可以采用大括号完成,只要在数组的生命格式后面加上初值的赋值即可,

数据类型数组名 []={初始值0,初始值1,初始值3,....初始值n};

范例排序,在操作中排序是比较常用的从大到小

这个时候不要被i值所迷惑if(score[i]>score[j]){

这一步主要知识为了比较,实际上完成之后输出的时候是根据j的值排序的

二维数组声明的方式和以为数组的类似,内存分配也一样是用new这个关键字

数组名=new数据类型[行的个数][列的个数];

数据类型数组名[][]=new数据类型[行的个数][列的个数];

声明二维数组score同时开辟一段内存空间

整体数据score可保存的元素是4*3=12个,在java中,int数据类型所占用的空间为4个字节,因此该整形数组占用的内存共为4*12=48个字节

用到的时候才会开辟空间,不用的(红色部分)则不开辟空间多维数组一般只是用到二维数组三维数组简单了解

四、需要一个java程序

啊,写了好几个小时,方法比较笨,你参考一下:

private static final String[] STUDENTS={"张1","张2","张3","张4","张5"};

//定义课程名,课程号分别对应为数组下标 1,2,3...n+1,即英语的课程号为1,高数为2,以此类推,可以添加更多课程

private static final String[] CLASS_NAME={"英语","高数","大物"};

public static void main(String[] args){

//定义一个二维数组,模拟一份成绩单,其中第一列为学生的名字,后面几列分别代表各科成绩,

//数组大小为:学生人数×(课程数+ 1)

String[][] grades= new String[STUDENTS.length][CLASS_NAME.length+ 1];

for(int i= 0; i< STUDENTS.length; i++){

//这里使用随机数来得到学生的成绩,你也可以直接定义一个写死的数组或者输入进去

for(int j= 1; j< CLASS_NAME.length+ 1; j++){

grades[i][j]= String.valueOf((int)(Math.random()* 100));

//这里先把成绩单打印出来,并整理了格式

System.out.println("学生成绩单:");

System.out.println("[姓名|英语高数大物]");

for(int i= 0; i< STUDENTS.length; i++){

for(int j= 0; j< CLASS_NAME.length+ 1; j++){

System.out.print(String.format("%-3s", grades[i][j])+"|");

} else if(j< CLASS_NAME.length){

System.out.print(String.format("%-3s", grades[i][j])+"");

System.out.print(String.format("%-3s", grades[i][j]));

System.out.println("----------------------");

System.out.println("请选择操作(1-任意学生成绩的查询;2-某一门课程的成绩从低到高排序):");

Scanner in= new Scanner(System.in);

System.out.println("请输入一个学生的名字:");

String studentName= in.nextLine();

for(int i= 0; i< STUDENTS.length; i++){

//将输入的学生姓名在成绩单第一列中比较,有该学生则输出其成绩

if(grades[i][0].equals(studentName)){

System.out.println("学生["+ studentName+"]的成绩为:");

for(int j= 0; j< CLASS_NAME.length; j++){

System.out.println(CLASS_NAME[j]+":"+ grades[i][j+ 1]);

System.out.println("无此学生成绩,请核对其姓名");

System.out.println("请输入一门课程的名字:");

String className= in.nextLine();

//因为涉及到二维数组的重新排序,我这里定义了一个内部类SortGradeHelper,

//你不喜欢内部类也可以把它单独拿出去弄成一个普通的类,类的定义和排序方式详见这个类

SortGradeHelper sortGrade= new SortGradeHelper();

grades= sortGrade.doSort(grades, 1);

} else if("高数".equals(className)){

grades= sortGrade.doSort(grades, 2);

} else if("大物".equals(className)){

grades= sortGrade.doSort(grades, 3);

System.out.println("无此课程");

System.out.println("新的学生成绩单:");

System.out.println("[姓名|英语高数大物]");

for(int i= 0; i< STUDENTS.length; i++){

for(int j= 0; j< CLASS_NAME.length+ 1; j++){

System.out.print(String.format("%-3s", grades[i][j])+"|");

} else if(j< CLASS_NAME.length){

System.out.print(String.format("%-3s", grades[i][j])+"");

System.out.print(String.format("%-3s", grades[i][j]));

System.out.println("无效的选择!(1-任意学生成绩的查询;2-某一门课程的成绩从低到高排序)");

private SortGradeHelper[] sortGrades= new SortGradeHelper[STUDENTS.length];

SortGradeHelper(int sort, int grade){

/*我这个二维数组排序的思想是:

1、首先将某一列排出来,比如英语成绩,则把英语这一列先拿出来排序

2、以刚刚排出来的这一列为标准,按照新的行序列,把原成绩单赋值给新成绩单返回

按照英语进行排列,则先取出英语这一列,生成本类的this.sortGrades数组,该数组具体为:

则可以看出本列的原顺序为:0,1,2,3,4

之后采用冒泡排序,按照英语成绩从小到大排序,则排序后的this.sortGrades数组为:

则成绩单所有行都将按照这个新的顺序排列,按照此顺序得到newGrades[][]数组返回

String[][] doSort(String[][] grades, int classNo){

//按照课程号取出该课程这一列的成绩

for(int i= 0; i< STUDENTS.length; i++){

this.sortGrades[i]= new SortGradeHelper(i, Integer.valueOf(grades[i][classNo]));

for(int i= 0; i< STUDENTS.length- 1; i++){

for(int j= 0; j< STUDENTS.length- 1- i; j++){

if(this.sortGrades[j].grade> this.sortGrades[j+ 1].grade){

this.sortGrades[j]= this.sortGrades[j+ 1];

String[][] newGrades= new String[STUDENTS.length][CLASS_NAME.length+ 1];

for(int i= 0; i< this.sortGrades.length; i++){

for(int j= 0; j< CLASS_NAME.length+ 1; j++){

newGrades[i][j]= grades[this.sortGrades[i].sort][j];

我发的代码老是会挤到一起,所以我再把程序截图给你:

115-142行对排序方法的注释和举例

如果你还想了解更多这方面的信息,记得收藏关注本站。