第五单元 如何使用数组
一、动手任务
1.数组声明-创建-赋值-遍历
(1).数组声明
- 数组声明的时候不能指定大小。
- 示例如下:
int score[];
//推荐写以下的方法
int [] salary;
//int score [4]; 错误
(2).数组创建
- 数组在使用new创建的时候才可以指定数组的大小;数组元素有默认值,规则和类型属性一致。
- 示例如下:
int[] score = new int[5];
(3).数组赋值:有数组,等号左侧一定是空的
- (1).静态初始化
- 示例如下:
int[] len = {2,3,45,56};
int[] ken = new int[] {0,1,2,3,5};
score[0] = 20;//一个各赋值
-
(2).动态初始化
-
示例如下:
for(int i = 0;i < score.length;i++) {
score[i] = i * 10;
}
- 若数组已经声明或创建,用动态赋值,或者一个个赋值
(4).数组遍历
- Java中数组不可以越界取值。
- for循环示例如下:
//for循环取值
for(int i = 0;i < score.length;i++) {
System.out.println("score[" + i + "] = " + score[i]);
}
- for-each循环示例如下:
//for-each循环 JDK1.5之后的新特性
for(int x:score) {
System.out.println(x);
}
2.引用类型数组
- 示例如下:
public class StudentArray {
public static void main(String[] args) {
Student[] stu = new Student[3];
stu[0] = new Student("zs", 19);
stu[1] = new Student("ls", 20);
Student[] tyuststu = {new Student("zs", 19),new Student("ls", 20),new Student("ww", 21)};
Student[] titstu = new Student[] {new Student("zs", 19),new Student("ls", 20),new Student("ww", 21)};
for (int i = 0; i < titstu.length; i++) {
System.out.println(titstu[i].name);
}
}
}
class Student {
String name;
int age;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
}
3.数组相关程序练习题:
-
(1).创建数组包含5位学生的Java课程成绩
-
(2).老师输入5位学生的Java课成绩保存到数组并输出
-
(3).对5位学生的成绩从小到大排序(使用冒泡排序)
-
(4).对5位学生的成绩从小到大排序(使用Java API)
-
(5).创建包含3位学生数组,并输出3位学生的信息
-
(6).创建一个int型二维数组并遍历
二、准确口述
-
1.一个数组中能否存放不同类型的数据?
- 答:不能。
-
2.数组元素默认值规则?
- 答:与类属性默认值规则一样
-
3.数组能否越界取值?
- 答:Java中数组不可以越界取值。
-
4.一维数组在定义时能否指定长度?
- 答:定义时不能指定长度,只有创建时才可以指定长度。
5.一维简单类型数组在内存中是如何存放的?
6.一维引用类型数组在内存中是如何存放的?
-
以上两个问题等过后再解决。
-
7.二维数组第1维的大小可以不指定吗?第2维呢?
- (1)二维数组的第一维的大小必须指定,第二维可以不指定。
- (2)二位数组遍历需要使用双重for循环。
- (3)Java中的二维数组是通过一维数组叠加形成的。
-
8.冒泡排序示例(从小到大) 示例如下:
int temp = 0;
for(int i = 0;i < before.length - 1;i++) {
for(int j = 0;j < before.length - i - 1 ;j++) {
if(before[j] < before[j + 1]) {
temp = before[j];
before[j] = before[j + 1];
before[j + 1] = temp;
}
}
}
- 9.Arrays.sort():Java中自带的排序方法
- (1).Java中的自带排序方法Arrays.sort() 从小到大。
- (2).Arrays叫做数组实用类
- (3).Java中的sort用的是哪种排序方法:DualPivotQuicksort 快速排序;与一般的快速排序不同。
- 示例如下:
Arrays.sort(score);
for (int i = 0; i < score.length; i++) {
System.out.println(score[i]);
}
- 10.以下两个方案哪个更好?
- 示例如下:
A方案
for(执行5次) {
for(执行3次) {
A方案
}
}
B方案
for(执行3次) {
for(执行5次) {
A方案
}
}
- 答:B方案更好,内外层切换比较费时,B方案的切换次数较少,效率更高。
三、课后任务
- 1.将5位学生的Java成绩由大到小排序
public class Scoresort {
/**
* 由大到小排序
* @param score 原始数组
* @return 排序后的数组
*/
public int[] sort(int []score) {
int temp = 0;
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score.length - i - 1; j++) {
if (score[j] < score[j + 1]) {
temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
}
return score;
}
public static void main(String[] args) {
Scoresort ss = new Scoresort();
int score [] = {60,90,75,80,65};
int[] result = ss.sort(score);
for (int i = 0; i < result.length; i++) {
System.out.println(score[i]);
}
}
}
- 2.输出5位学生Java课程的平均分
public class Averagearray {
public static void main(String[] args) {
int[] score = {60,90,80,75,65};
int sum = 0;
for (int i = 0; i < score.length; i++) {
sum += score[i];
}
double average = sum * 1.0 / score.length;
System.out.println(average);
}
}
- 3.输出成绩数组中80出现的总次数和索引
public class Count {
public static void main(String[] args) {
int[] score = {80,20,60,80,50,80,70,80};
int count = 0;
for (int i = 0; i < score.length; i++) {
if (score[i] == 80) {
count++;
System.out.println("80的索引是:"+ "score[" + i + "]");
}
}
System.out.println("80总共出现的次数是:"+ count + "次");
}
}