《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。
一、内容概述
• 掌握数组的概念
• 掌握一维数组的声明和初始化
• 掌握一维数组的应用
• 了解二维数组的声明和使用
二、一维数组
1、数组的概念:数组是一种相同数据类型的集合
一个纬度:
球={“足球”,“篮球”,“排球”}
食品={“牛奶”,“蛋糕”,“饼干”}
二个纬度:
人= {地球人{“中国人”,“英国人”,“美国人”},外星人{“火星人”,“金星人”}}
(1)数组在内存中的分配示意图
声明一个变量就是在内存空间划出一块合适的空间
声明一个数组就是在内存空间划出一串连续的空间
(2)数组的结构和基本要素
标识符:数组的名称,用于区分不同的数组
数组元素:向数组中存放的数据
元素下标:对数组元素进行编号
元素类型:数组元素的数据类型
例如:
代购={“固态硬盘”,“松花粉”,“雅诗兰黛化妆品”}
(3)数组的概念说明
数组只有一个名称,即标识符
元素下标标明了元素在数组中的位置,从0开始
数组中的每个元素都可以通过下标来访问
数组长度固定不变,避免数组越界
2、为什么要使用数组?
现实中的案例-1:
Java实训班考试结束后,老师给lily分配了一项任务,让他计算全班(30人)的平均分
int stu1=60;
int stu2=70;
int stu3=80;
int stu4=66;
int stu5=68;
int stu6=90
………
Int stu30=100
Avg=stu1+stu2+stu3+stu4+…..stu30/30
上述案例:30个变量,太繁琐
解决方案:使用数组
3、一维数组:
(1)定义:
一维数组的声明方式有两种:
type[] arr_name;
type arr_name[];
(2)数组定义示意图
计算机分配几个连续的空间
(3)数组的定义及其赋值有如下几种形式:
int i[] = new int[3];
int j[] = {1,2,3};
int k[] = new int[]{3,4,5};
注意特殊情况
String s[]=new String[3];
String s[]={null,null,null};
String s[]=new String[]{null,null,null};
从上述例子可以看出数组赋值大致有2种情况:
方式1: 边声明边赋值
int[ ] score = {89, 79, 76};
int[ ] score = new int[ ]{89, 79, 76};
方式2:动态赋值
Scanner input = new Scanner(System.in);
for(int i = 0; i < 30; i ++)
{
score[i] = input.nextInt();
}
(4)一维数组的应用
数组元素的输出:
方式一:
int arr[]= {1,2,3,4,5};
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
倒序输出:
int arr[]= {1,2,3,4,5};
for (int i= arr.length-1;i>=0; i--)
{
System.out.println(arr[i]);
}
方式二:
For-each循环
int arr[]= {1,2,3,4,5};
for(int i:arr)
{
System.out.println(i);
}
案例:从终端输入5个学生并且求其平均值
int[ ] scores = new int[5];//成绩数组
int sum = 0; //成绩总和
Scanner input = new Scanner(System.in);
System.out.println("请输入5位学员的成绩:");
for(int i = 0; i < scores.length; i++)
{
scores[i] = input.nextInt();
sum = sum + scores[i];//成绩累加
}
System.out.println("平均分是:" + (double)sum/scores.length);
数组的应用其它案例:
【1】求最大值和最小值
【2】查找数组的元素
【3】添加元素和删除元素
【4】理解Main(String args[])
【5】可变参数
【6】Arrays工具类
【7】长度可变的数组(扩容)
【8】冒泡排序
练习:
1、编写一应用程序实现下述功能:创建一基本(primitive)数据类型的数组并输出各数组元素的值。例如:
char c[]=new char[5];
for ( int i=0; i<5; i++ )
{
s[i] = (char) ('A' + i);
System.out.println(s[i]);
}
2、编写一应用程序练习数组对象的两种初始化方式,并输出各元素的值。
3、编写程序,练习使用数组类型对象的length属性,测试并体会数组元素的默认初始化机制。
二、二维数组
1、二维数组定义举例
int [][] a = {{1,2},{3,4,0,9},{5,6,7}};
Java中多维数组不必须是规则矩阵形式
注意:
【1】除了静态初始化外,多维数组也可以通过数组声明和初始化分开的动态初始化方法来对数组进行初始化,例如 int a[][] = new int[4][5];
【2】数组空间分配从高维到低维,也就是从左到右,所以必须先分配第一维
【3】也可以如下定义,其内存空间分布如下图所示
int b[][] = new int[3][] //指定最左边维的大小
b[0]=new int[2]; b[1]=new int[3]; b[2]=new int[1]
二维数组定义示意图:
二维数组举例:
{
public static void main(String args[]) {
String[][] s = null;
s = new String[3][];
s[0] = new String[2];
s[1] = new String[3];
s[2] = new String[2];
for(int i = 0;i<s.length;i++){
for(int j = 0;j<s[i].length;j++){
s[i][j] = new String("我的位置是:"+i+","+j);
}
}
for(int i = 0;i<s.length;i++){
for(int j = 0;j<s[i].length;j++){
System.out.print(s[i][j]+" ");
}
System.out.println();
}
}
}
2、数组的拷贝
【1】使用java.lang.System类的静态方法public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
【2】可以用于数组src从第srcPos项元素开始的length个元素拷贝到目标数组从destPos项开始的length个位置
【3】如果源数据数目超过目标数组边界会抛出IndexOutOfBoundsException 异常
示例:
public static void main(String args[]) {
String[] s = {"Mircosoft","IBM","Sun","Oracle","Apple"};
String[] sBak = new String[6];
System.arraycopy(s,0,sBak,0,s.length);
for(int i=0;i<sBak.length;i++){
System.out.print(sBak[i]+" ");
}
System.out.println();
int[][] intArray = {{1,2},{1,2,3},{3,4}};
int[][] intArrayBak = new int[3][];
System.arraycopy(intArray,0,intArrayBak,0,intArray.length);
intArrayBak[2][1] = 100;
for(int i = 0;i<intArray.length;i++){
for(int j =0;j<intArray[i].length;j++){
System.out.print(intArray[i][j]+" ");
}
System.out.println();
}
}
}
3、Java命令行参数
• JAVA应用程序的主方法(程序的入口)
– public static void main (String args[]) {…}
– public static void main (String[] args) {…}
• 命令行参数
– 在启动Java应用程序时可以一次性地向应用程序中传递0~多个参数----命令行参数
– 命令行参数使用格式:
java ClassName lisa "bily" "Mr Brown“
由参数args接收
– 空格将参数分开
– 若参数包含空格,用双引号引起来
例如:
public class Test {
public static void main(String[] args) {
for ( int i = 0; i < args.length; i++ ) {
System.out.println("args[" + i + "] = " + args[i]);
}
}
}
//运行程序
java Test lisa "bily" "Mr Brown"
//输出结果:
args[0] = lisa
args[1] = bily
args[2] = Mr Brown
4、数组排序函数Java.uitl.Arrays
该类提供了关于数组操作的API.
打印数组----toString方法。
比较两个数组是否相同----equals方法。
数组排序----sort方法。
数组查找----binarySearch 方法
练习:
1. 下面的数组定义哪些是正确的?
A: int a[][] = new int[3,3];
B: int a[3][3] = new int[][];
C: int a[][] = new int[3][3];
D: int []a[] = new int[3][3];
E: int [][]a = new int[3][3];
2. 定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”,不包含就打印出“No” 。
3. 请在下面语句中找出一个正确的
A. int arr1[2][3];
B. int[][] a2 = new int[2][];
C. int[][] arr2=new int [][4];
D. int arr3[][4]= new int [3][4];
4. 用二重循环求出二维数组b所有元素的和:
int[][] b={{11},{21,22},{31,32,33}}
5. 利用Java的Math类的random()方法,编写函数得到0到n之间的随机数,n是参数。提示: int num=(int)(n*Math.random());并找出产生50个这样的随机数中最大的、最小的数,并统计其中大于等于60的有多少个
6. 求职面试真题:生成一百个随机数,然后排序输出
《大数据和人工智能交流》的宗旨
1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。
2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。
3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。
根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。
根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。