Java入门 - 数组基础
第1关:初识数组
任务描述
本关任务:定义数组,使用数组。
相关知识
问:道友,我要保存4
名学生的考试成绩,怎么办? 答:简单啊,定义四个变量呗。 问:那“计算全年级500
名学生的考试成绩的平均值”,怎么办? 答:。。。。 数组:我来。
数组是什么
如果说我们之前使用的变量可以比作是一个装水的杯子,那么数组你可以看做是一个杯架(只能装一种杯子的杯架)。
怎么定义数组
变量类型[] 数组名 = {数据1,数据2,数据3,...};
怎么访问数组中的元素
访问数组中的元素使用:数组名
[
索引值
]
,索引值一般也叫做数组的下标。
- 数组名[数组下标]
编程要求
在Begin-End
区域中定义一个int
类型数组 scores
,录入三个值,91
,88
,60
,最后输出数组中的三个值,效果如图:
测试说明
平台会对你编写的代码进行测试:若与预期输出相同,则算通关。
开始你的任务吧,祝你成功!
package step1;
public class HelloWorld {
public static void main(String[] args) {
/********** Begin **********/
int [] scores = {91,88,60};
System.out.println("数组的第一个值为:"+scores[0]); //在这里输出数组的第一个值
System.out.println("数组的第二个值为:"+scores[1]); //在这里输出数组的第二个值
System.out.println("数组的第三个值为:"+scores[2]); //在这里输出数组的第三个值
/********** End **********/
}
}
第2关:数组的使用
任务描述
本关任务:使用多种方式定义数组,并输出数组中的数据。
相关知识
为了完成本关任务你需要掌握:数组初始化的两种方式,1.静态初始化;2.动态初始化。
静态初始化
在程序运行前就能确定数组的大小和数组中的初始数据我们称之为静态初始化。 例如:
float[] stuScores = {80.0f,70.0f,90.0f,66.5f};
int[] nums = {80,70, 90,66};
char[] chs = {‘a’,’b’, ‘c’,’d’};
动态初始化
数组的大小或数组中数据在程序运行时才能决定,且用到new
这个关键字来确定数组的大小或初始数据我们称之为动态初始化。 定义数组:变量类型
[]
数组名
= new
数据类型
[
数组长度
];
定义数组与初始化分离:
赋值: 初始化之后就可以向数组中放数据了,数组中元素都是通过下标来访问的,例如向 stuScores
数组中存放学生成绩:
编程要求
使用本关所学知识,根据右侧编辑器Begin-End
中提示补充代码,赋值并输出数组中的信息。
测试说明
我会对你的程序测试两次: 输入:3
预期输出: 数组中的第一个数据为:张三
数组中的第二个数据为:张无忌
数组中的第三个数据为:张三丰
数组中的第四个数据为:张岁山
数组
scores
的长度为:
3
输入:5
预期输出: 数组中的第一个数据为:张三
数组中的第二个数据为:张无忌
数组中的第三个数据为:张三丰
数组中的第四个数据为:张岁山
数组
scores
的长度为:
5
开始你的任务吧,祝你成功!
package step2;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
/********** Begin **********/
//在这里定义一个长度为4的字符串数组,用来存放学生姓名
String[] stuNames = new String[4];
//在这里给stuNames数组赋值 分别为 张三,张无忌,张三丰,张岁山
//"张三","张无忌","张三丰","张岁山";
stuNames[0] = "张三";
stuNames[1] = "张无忌";
stuNames[2] = "张三丰";
stuNames[3] = "张岁山";
//在这里输出stuNames数组中的数据
System.out.println("数组中的第一个数据为:" + stuNames[0]);
System.out.println("数组中的第二个数据为:" + stuNames[1]);
System.out.println("数组中的第三个数据为:" + stuNames[2]);
System.out.println("数组中的第四个数据为:" + stuNames[3]);
int[] scores;
Scanner sc = new Scanner(System.in);
//在这里使用Scanner获取系统输入的整数,并用获取到的数据来设置scores数组的长度
int length = sc.nextInt();
scores = new int[length];
/********** End **********/
System.out.println("数组scores的长度为:" + scores.length);
}
}
第3关:选择题(1)
- 1、
以下数组声明有误的是()
A、
int[] num;
B、
String num[];
C、
double[] num=new double[];
D、
String num[]=new String[5];
- 选项C有误,因为在创建一个新的double数组时,必须指定数组的长度,例如double[] num = new double[10]。
- 选项A、B和D都是正确的,因为它们只是声明了一个数组变量,没有创建一个新的数组对象。它们可以用不同的方式来表示数组类型,例如int[] num和int num[]都是合法的。
- 2、
定义数组如下 String[] s={“ab”,”cd”,”ef”}; 运行语句System.out.println(s[3]);程序运行的结果为()
A、
ab
B、
cd
C、
ef
D、
程序出错了
- 选项D是正确的,因为程序会出错了。原因是数组s的长度为3,它的有效索引范围是0到2,而s[3]试图访问数组的第四个元素,这是不存在的,所以会抛出一个ArrayIndexOutOfBoundsException异常。
- 选项A、B和C都是错误的,因为它们都不是程序运行的结果。即使数组s有第四个元素,也不可能是ab、cd或ef,因为它们已经分别对应了s[0]、s[1]和s[2]。
- 3、
数组初始化有错误的是()
A、
int[] num={12,53.7,’6’};
B、
String sewd[]=new String[]{12,52,63};
C、
char car[]={‘’1,’2’,6’’};
D、
double[] dou=new int[10];
- 选项A有错误,因为在创建一个int数组时,不能用小数或字符来初始化数组元素,只能用整数。例如,53.7和’6’都是不合法的。
- 选项B有错误,因为在创建一个String数组时,不能用整数来初始化数组元素,只能用字符串。例如,12、52和63都是不合法的。
- 选项C有错误,因为在创建一个char数组时,不能用双引号来表示字符,只能用单引号。例如,'‘1和6’'都是不合法的。
- 选项D有错误,因为在创建一个double数组时,不能用int类型来指定数组的长度,只能用double类型。例如,new int[10]是不合法的。
- 因此,所有的选项都是错误的。
第4关:数组练习-平均值和最大值
任务描述
本关任务:编写一个能计算数组平均值和最大值的小程序。
相关知识
为了完成本关任务,你需要知道:1.如何获取数组的长度,2.
如何遍历数组。
获取数组的长度
数组的length
属性用于记录数组中有多少个元素或存储单元,即记录数组的长度是多少。
int[] nums = new int[10];//声明一个int型数组并动态初始化其大小为10
System.out.println(nums.length);//显示当前数组的大小
输出:10
遍历数组
通俗的理解,遍历数组就是:把数组中的元素都看一遍。
示例如下:
int[] arr = {1,3,5,7,9};
for(int i = 0 ; i<arr.length; i++){
System.out.print(arr[i] + ",");
}
输出:1,3,5,7,9
如何求出最大值
要求出数组的最大值,是不是很像是打擂台呢?
对于一群人我们不知道谁最厉害,所以我们准备一个擂台,并挑选第一个人为擂主(max),擂台下的人不断的(循环)来挑战擂主,如果赢了那挑战者就是擂主,之前的擂主就下台了,直到没有挑战者了,那最后一个擂主就是最厉害的那个了。
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,计算并输出数组的平均值和最大值。
测试说明
我会对你编写的代码进行测试:
测试输入:4
,91
,51
,2
,32
; 预期输出: 平均值:
44.0
最大值:
91
测试输入:5
,1
,151
,12
,22
,100
; 预期输出: 平均值:
57.2
最大值:
151
提示:
int a = 3;
int b = 2;
System.out.println(a/b);
System.out.println((double)a/b);
输出: 1
1.5
开始你的任务吧,祝你成功!
package step3;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] scores = new int[sc.nextInt()];//声明一个int型数组并动态初始化其大小为【输入值】
//循环给数组赋值
for(int i = 0 ; i< scores.length;i++){
scores[i] = sc.nextInt();
}
/********** Begin **********/
//在这里计算数组scores的平均值和最大值
//声明一个变量sum来存储数组的总和
int sum = 0;
//声明一个变量max来存储数组的最大值,并假设第一个元素是最大值
int max = scores[0];
//用一个for循环来遍历数组
for(int i = 0; i < scores.length; i++){
//把每个元素加到sum上
sum += scores[i];
//把每个元素和max比较,如果元素大于max,就把元素赋值给max
if(scores[i] > max){
max = scores[i];
}
}
//用(double)sum / scores.length来得到平均值,并输出
System.out.println("平均值:" + (double)sum / scores.length);
//输出最大值
System.out.println("最大值:" + max);
/********** End **********/
}
}
第5关:二维数组
任务描述
本关任务:定义二维数组,输出二维数组中的数据。
相关知识
在实际考试中我们不止考试一门而是多门,那么多门考试的成绩我们需要用编程语言来处理时,我们怎么保存这些数据呢?
这就需要用到二维数组了。
二维数组
定义:二维数组是指以一维数组作为元素的数组。 语法:数据类型
[
行
][
列
]
数组名
。
二维数组的初始化
静态:
动态:
二维数组的使用
访问数组中的元素:
使用技巧:循环输出二维数组中的数据。
结果:
编程要求
1.在右侧Begin-End
区域中定义如下二维数组,使用for
循环输出数组中所有的数据:
2.
使用for
循环将上述数组中的数据全部改为:
最后输出修改后scores
数组中的数据。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
开始你的任务吧,祝你成功!
package step4;
public class HelloWorld {
public static void main(String[] args) {
/********** Begin **********/
// 使用for循环输出数组中所有的数据:
// int[] [] scores = {
// {92,85},
// {91,65},
// {90,33}
// };
// 使用for循环将上述数组中的数据全部改为:
// int[] [] scores = {
// {1,2},
// {1,2},
// {1,2}
// };
//定义二维数组
int[][] scores = {
{92,85},
{91,65},
{90,33}
};
//使用for循环输出数组中所有的数据
for(int i = 0; i < scores.length; i++){
for(int j = 0; j < scores[i].length; j++){
//在每个元素后面换行
System.out.println(scores[i][j]);
}
}
//使用for循环将上述数组中的数据全部改为:
for(int i = 0; i < scores.length; i++){
for(int j = 0; j < scores[i].length; j++){
//把第一列都改为1
if(j == 0){
scores[i][j] = 1;
}
//把第二列都改为2
else{
scores[i][j] = 2;
}
}
}
//最后输出修改后scores数组中的数据
for(int i = 0; i < scores.length; i++){
for(int j = 0; j < scores[i].length; j++){
System.out.println(scores[i][j]);
}
}
/********** End **********/
}
}
预期输出:
92(换行)
85(换行)
91(换行)
65(换行)
90(换行)
33(换行)
1(换行)
2(换行)
1(换行)
2(换行)
1(换行)
2
第6关:选择题(2)
- 1、
声明数组如下: float[][] f=new float[2][3]; 那么该数组一共有( )个元素
A、
2
B、
4
C、
6
D、
8
- 选项C是正确的,因为该数组一共有6个元素。原因是该数组是一个二维数组,它的第一个维度的长度是2,表示它有两行;它的第二个维度的长度是3,表示它每行有三列。所以,它的总元素个数是2乘以3,等于6。
- 选项A、B和D都是错误的,因为它们都不是该数组的总元素个数。选项A和B都太小了,只考虑了数组的一个维度;选项D太大了,把数组的两个维度相加了。
- 2、
以下的程序是否有错()
A、
不能运行
B、
编译不通过
C、
会正常运行
D、
以上说法都不对