educoder---Java入门-数组基础

第1关:初始数组

任务描述

本关任务:定义数组,使用数组。

相关知识

问:道友,我要保存4名学生的考试成绩,怎么办?
答:简单啊,定义四个变量呗。
问:那“计算全年级500名学生的考试成绩的平均值”,怎么办?
答:。。。。
数组:我来。

数组是什么

如果说我们之前使用的变量可以比作是一个装水的杯子,那么数组你可以看做是一个杯架(只能装一种杯子的杯架)。
educoder---Java入门-数组基础

怎么定义数组

变量类型[] 数组名 = {数据1,数据2,数据3,...};
educoder---Java入门-数组基础

怎么访问数组中的元素

访问数组中的元素使用:数组名[索引值],索引值一般也叫做数组的下标。
数组名[数组下标]
educoder---Java入门-数组基础

编程要求

Begin-End区域中定义一个int类型数组 scores,录入三个值,918860,最后输出数组中的三个值,效果如图:
educoder---Java入门-数组基础

测试说明

平台会对你编写的代码进行测试:若与预期输出相同,则算通关。

实现代码

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’};

educoder---Java入门-数组基础

动态初始化

数组的大小或数组中数据在程序运行时才能决定,且用到new这个关键字来确定数组的大小或初始数据我们称之为动态初始化。
定义数组:
变量类型[] 数组名 = new 数据类型 [ 数组长度 ];
educoder---Java入门-数组基础

定义数组与初始化分离:
educoder---Java入门-数组基础

赋值:
初始化之后就可以向数组中放数据了,数组中元素都是通过下标来访问的,例如向 stuScores数组中存放学生成绩:
educoder---Java入门-数组基础

编程要求

使用本关所学知识,根据右侧编辑器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);
	}
}

第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

如何求出最大值

要求出数组的最大值,是不是很像是打擂台呢?
educoder---Java入门-数组基础

对于一群人我们不知道谁最厉害,所以我们准备一个擂台,并挑选第一个人为擂主(max),擂台下的人不断的(循环)来挑战擂主,如果赢了那挑战者就是擂主,之前的擂主就*了,直到没有挑战者了,那最后一个擂主就是最厉害的那个了。

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,计算并输出数组的平均值和最大值。

测试说明

我会对你编写的代码进行测试:
测试输入:49151232
预期输出:
平均值:44.0
最大值:91
测试输入:511511222100
预期输出:
平均值: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()];
		
		//循环给数组赋值
		for(int i = 0 ; i< scores.length;i++){
			scores[i] = sc.nextInt();
		}
		/********** Begin **********/
		//在这里计算数组scores的平均值和最大值
        float sum = 0;
        int max = scores[0];
        float avg;
		for(int i = 0; i < scores.length; i++){
            sum = sum + scores[i];

        }
        for(int i = 1; i < scores.length; i++){
            if(scores[i]>scores[i-1]){
                max = scores[i];
            }else{
                break;
            }

        }   

		
		avg = sum / scores.length;
		
		
		
		
		
		System.out.println("平均值:"+avg);
		System.out.println("最大值:"+max);
		/********** End **********/
	}
}

第5关:二维数组

任务描述

本关任务:定义二维数组,输出二维数组中的数据。

相关知识

在实际考试中我们不止考试一门而是多门,那么多门考试的成绩我们需要用编程语言来处理时,我们怎么保存这些数据呢?
educoder---Java入门-数组基础

这就需要用到二维数组了。

二维数组

定义:二维数组是指以一维数组作为元素的数组。
语法:数据类型[行][列] 数组名。

二维数组的初始化

静态:
educoder---Java入门-数组基础

动态:
educoder---Java入门-数组基础
educoder---Java入门-数组基础
educoder---Java入门-数组基础

二维数组的使用

访问数组中的元素:
educoder---Java入门-数组基础

使用技巧:循环输出二维数组中的数据。

educoder---Java入门-数组基础

结果:
educoder---Java入门-数组基础

编程要求

1.在右侧Begin-End区域中定义如下二维数组,使用for循环输出数组中所有的数据:
educoder---Java入门-数组基础

2.使用for循环将上述数组中的数据全部改为:
educoder---Java入门-数组基础

最后输出修改后scores数组中的数据。

实验代码:

package step4;

public class HelloWorld {
	public static void main(String[] args) {
		/********** Begin **********/
		int[][] scores = {{92,85},{91,65},{90,33}};

        for(int i=0; i<scores.length; i++){     //行循环次数scores.length(每一列的长度)
            for(int j=0; j<scores[i].length; j++){  //列循环次数scores[i].length(每一行的长度)
                System.out.println(scores[i][j]);
            }
            //System.out.println();
        }
        //scores[][] = {{1,2},{1,2},{1,2}};     //是错误的
        for(int i=0; i<scores.length; i++){
            scores[i][0] = 1;
            scores[i][1] = 2;
        }
        for(int i=0; i<scores.length; i++){     //行循环次数
            for(int j=0; j<scores[i].length; j++){  //列循环次数
                System.out.println(scores[i][j]);
            }
            //System.out.println();
        }
		
		
		
		
		
		
		
		
		/********** End **********/
	}
}

实验分析

  1. 行循环次数scores.length(每一列的长度)
  2. 列循环次数scores[i].length(每一行的长度)
上一篇:机器学习1:scikit-learn简介(3)—— 交叉验证


下一篇:优化理论11有约束优化---Zoutendijk可行方向法