java学习第二十一天

目录

一、数组的快速入门和使用

定义:

引出数组的使用:

注意事项:

数组的长度:

二、数组使用方式

一、动态初始化

二、静态初始化

三、数组使用细节(复习string和基本数据类型转换)

四、练习


一、数组的快速入门和使用

定义:

数组:是一种引用数据类型,顾名思义就是一组数据,一组同一类型的数据

引出数组的使用:

问题:
        一个有 养鸡场有 6 只鸡,它们的体重分别是 
        3kg,5kg,1kg,3.4kg,2kg,50kg 。
        请问这六只鸡的总体重是多少?平均体重是多少? 

传统方法:逐个定义六个变量,然后相加求和再/6求平均数

缺点:死板,浪费时间,如果是几百个数据也要一一定义

解决方法:用数组来解决问题

1.定义一个数组  double[] hens = {3, 5, 1, 3.4, 2, 50,4.5};
    double[]表示是double类型的数组  数组名:hens 

2. {3, 5, 1, 3.4, 2, 50}依次表示数组的值/元素

3.遍历数组得到数组的所有元素的和,使用for循环

注意事项:


        1.我们可以通过hens[下标]来访问数组的元素,下标是从0开始编号的(!!),第一个元素就是hens[0],第二个元素是hens[2];以此类推,所以for循环中循环变量初始化 i=0;
        2.通过for就可以循环的访问数组的元素
        3.使用一个变量 totalWeight 将各个元素累积
       

public class ArrayTest{
	public static void main(String[] args){
		double[] hens = {3, 5, 1, 3.4, 2, 50};
		double totalWeight = 0;
		for(int i = 0; i < 6; i++){
			System.out.println("第" + i + "只鸡的重量是" + hens[i]);
			totalWeight += hens[i];
		}
		System.out.println("6只鸡的重量是" + totalWeight + "平均体重是" + (totalWeight / 6));
	}
	
}

数组的长度:

数组名.length;

作用:可以判断出数组内有多少个数据

比如:

public class Array01{
	//编写一个main方法
	public static void main(String[] args){
		平均体重=" + avgWeight);
		
		double[] hens = {3, 5, 1, 3.4, 2, 50,4.5};//定义一个数组

		double totalWeight = 0;

		for(int i = 0; i < 7; i++){//因为数组的下标是从0开始编号,所以初始循环变量必须是 i = 0;

			System.out.println("第" + (i+1) + "个元素的值=" + hens[i]);

			totalWeight += hens[i];

		}
		System.out.println("一共有" + hens.length + "组数据");
		System.out.println("总体重=" + totalWeight);
		System.out.println("平均体重=" + (totalWeight/7));
		
	}
}

运行结果:

 进一步优化:

把7全都替换成hens.length

二、数组使用方式

一、动态初始化

第一种动态分配方式

数据类型 数组名[] = new 数据类型[大小]

书写方式有两种:第一种: 数据类型[] 数组名,例如int[] a ;第二种:数据类型 数组名[],比如int a [ ]

import java.util.Scanner;
public class Array02{
	//编写一个main方法
	public static void main(String[] args){

	Scanner input = new Scanner(System.in);

	double scores[] = new double[5];//定义一个double型数组,这个数组有5个数
	//循环输入 
	for(int i = 0; i < scores.length; i++){
		System.out.println("请输入数组的第" + (i+1) + "个元素");

		scores[i] = input.nextDouble();//通过for循环依次输入此数组内的五个元素

	}
	//输出、遍历数组
	for(int i = 0; i < scores.length; i++){

		System.out.println("数组的第" + (i+1) + "个元素的值=" + scores[i]);

	}
 		
	}
}

第二种动态分配方式

先声明数组,再new

int a[] ;是一个空值,还没有真正的被分配存储空间

a = new int[5];被分配了内存空间,可以存放数据

二、静态初始化

直接写出所有元素的值 eg: int[] = {56,67,89,78,89};

适用于所有元素的值都已经确定了

三、数组使用细节(复习string和基本数据类型转换)

1)数组是多个相同类型数据的组合,实现对这些数据的统一管理

2)数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。

3)数组创建后,如果没有赋值,有默认值 整数型的四个byte、 short、 int、 long的是 0;小数型float 、double是 0.0;布尔型boolean是false;字符型char是\u000; 字符串String是null

4) 使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组(前面已经讲过)
5) 数组的从 下标是从 0 开始的。(重要!!!)

6) 数组下标必须在指定范围内使用,否则报:下标越界异常,double[] nums = new double[10];有效下标是0-9;

7) 数组属引用类型,数组型数据是对象(object)(???)//第七章会讲对象

四、练习

第一题:1) 创建一个 char 类型的 26 个元素的数组,分别 放置'A'-'Z'。使用 for 循环访问所有元素并打印出来。

我的思路:1)定义一个有26个元素的char类型的数组

2)char[0] = 'A';  char[1] = 'B'('A'+1);以此类推,需要使用for循环

代码

char[] arr = new char[26];
		
		for(int i = 0; i < arr.length; i++){

			arr[0] = 'A';
			arr[i] = (char)(arr[i]+1);

			
		}

此代码的执行流程

1)i=0; arr[0] = 'A';arr[0] = 'B';

2)i=1; arr[0] = 'A';arr[1] =(char)(arr[1]+1);//打印结果是□,是无效的

以此类推后面都是这种□

改正

arr[0]=(char)('A'+0)//'A'+0是int型数据,arr[]是数组,但是arr[0]是char类型,所以需要强制类型转换

arr[1]=(char)('A'+1)//B

arr[2]=(char)('A'+2)//C

...

arr[25]=(char)('A'+25)//Z

代码

public class ArrayExercise01{
	//编写一个main方法
	public static void main(String[] args){
		//1) 创建一个 char 类型的 26 个元素的数组,分别 放置'A'-'Z'。
		//使用 for 循环访问所有元素并打印出来。提示:char 类型
		//数据运算 'A'+2 -> 'C' 
		
		char[] arr = new char[26];
		
		for(int i = 0; i < arr.length; i++){

			
			arr[i] = (char)('A'+i);
			System.out.print(arr[i] + " ");

			
		}		
	}
}

第二题: 请求出一个数组 int[]的最大值 {4,-1,9, 10,23},并得到对应的下标。

代码

public class ArrayExercise02{
	//编写一个main方法
	public static void main(String[] args){
		
		
	//请求出一个数组 int[]的最大值 {4,-1,9, 10,23},并得到对应的下标
		int[] arr = {4, -1, 9, 10, 23, 78, 3, 90};

		int max = arr[0];
		int maxIndex = 0;
		for (int i = 1; i < arr.length; i++){
			if(arr[i] > max){
				max = arr[i];
				maxIndex = i;
			}
		}
		System.out.print("次数组的最大值是" + max + " 对应的下标是" + maxIndex);
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值