前面我们自己编写了对数组排序的算法,其实,在java中提供了数组排序的方法,该方法是类Arrays的一个静态方法sort,该方法其中一个原型为:
public static void sort(int[] a,int fromIndex,int toIndex)
各参数意义:
a - 要排序的数组
fromIndex - 要排序的第一个元素的索引(包括)
toIndex - 要排序的最后一个元素的索引(不包括)
该方法具体含义:
对指定 int 型数组的指定范围按数字升序进行排序。排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则排序范围为空。)当然,如果想要对数组所有元素进行排序的话,那么我们可以使用sort的另一个重载方式:
public static void sort(int[] a)
sort排序算法是一个经过调优的快速排序法。sort方法可以针对数组元素为基本类型的数组进行排序,因此,其重载方法比较多,共17个之多,有兴趣的读者可以查阅 JDK文档了解详情。
我们利用sort方法实现一个数组的排序。
[例5-9]
import java.util.Arrays;
import java.util.Scanner;
public class Test5_9 {
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
int n=5;//数组元素个数
int[] arr= new int[n];
System.out.println("请从键盘上输入"+n+"个数:");
//利用Scanner的 nextInt方法从键盘输入10个数
for(int i=0;i arr[i]=scan.nextInt();
}
Arrays.sort(arr);//Arrays.sort(arr,1,3);
System.out.print("排序后:");
for(int i=0;i }
}
}
运行结果为:
请从键盘上输入5个数:
第1个整数:14
第2个整数:24
第3个整数:15
第4个整数:53
第5个整数:36
排序后:14 15 24 36 53
5.1.9 对象数组
前面对数组的讨论,其数据类型都是基本数据类型,但实际应用中往往需要把不同类型的数据组合成一个有机的整体,以便于引用。例如,一个学生的姓名、性别、年龄和各科学习成绩等都是与这名学生密切相关的,对于一个班甚至一个学校的学生有都具有这样的特性。若果我们在编写程序的时候将每个学生的这些信息定义为独立的简单变量,那么,是很难反映他们之间的内在联系的,这时候我们需要使用类和对象章节中讲到的类的概念,将这些基本信息都集中到一个类中去实现,再将类实例化为对象,对象与个体学生相对应。
由自定义的对象作为数组元素所构成的数组被称为对象数组。也就说说,对象数组时指数组的每个元素都是具有相同属性的对象。或者说,如果一个类有若干个对象,我们可以把这些对象用一个对象数组来存放。
[例5-10]设有若干名学生,每个学生有姓名,性别和成绩三个属性,要求将每个学生作为一,个对象,建立获取对象名字的成员方法getName和获取对象性别的成员方法 getSex,以及输出对象的全部数据成员的成员方法print。
class Student{
private String name;
private char sex;
private int score;
Student(String name,char sex,int score){
this.name=name;
this.sex = sex;
this.score= score;
}
public String getName(){
return this.name;
}
public char getSex(){
return this.sex;
}
void print(){
System.out.println("Name:"+this.name+"\tSex:"+this.sex+"\tScore:"+this.score);
}
}
public class Test_10 {
public static void main(String[] args) {
Student[] stu = new Student[3];
stu[0] = new Student("张三",'男',88);
stu[1] = new Student("李四",'女',95);
stu[2] = new Student("王五",'男',79);
for(int i=0;i }
}
}
运行结果:
Name:张三 Sex:男 Score:88
Name:李四 Sex:女 Score:95
Name:王五 Sex:男 Score:79
5.1.10 命令行参数
对于java application程序来说,要想程序运行,必须有一个方法main,其格式为:
public static void main(String[] args)
在以前的程序中,我们只是使用,但从未使用过args参数,那么,这个String类型的参数是干什么的呢?
对于java的输入,我们可以使用Scanner类进行输入,也可以使用后面章节介绍的专门的输入流输入,也可以使用本节将要介绍的args参数输入。
Args参数表示main方法接收了一个字符串数组,一般我们称为命令行参数。
我们通过例5-11来解释args参数的输入问题
public class Test5_11 {
public static void main(String[] args) {
System.out.println("查看args参数:");
if(args.length==0){
System.out.println("没有使用args参数,args数组长度为0");
}
else{
for(int i=0;i }
}
}
} 既然是命令行参数,那么我们使用命令行的方式编译、运行该程序。
运行结果如下图:
图5-1 使用命令行方式运行5-11
Java程序执行时采用 java Test5_11 I like java的方式,那么args数组的内容为
Args[0]=”I”;
Args[1]=”like”;
Args[2]=”java”;
可见,程序名并没有存储在args数组中,args存储程序名后边的所有字符串。
这里需要注意的是,平时我们在使用main方法时,因为不给args传递字符串参数,因此,args数组的长度为0,即数组的长度可以为0,长度为0的数组表示数组没有元素,与数组为null不同。
Int[] a= new int[0];
Int[] b = null;
前者表示一个数组长度为0的数组,可以访问该数组,但后者数组指向null,调用会引发NullPointerException。 如果使用的是Eclipse,按如下方式设置:
(1)点击菜单Run,选择子菜单Run Configurations
(2)在如下界面中输入args的参数值,这里输入的是“I love java”
图5-2 使用Eclipse运行5-11的参数设置