数组的基本概念和使用方法
package Learn1;
public class Demo01 {
//数组的操作
public static void main(String[] args) {
//第一步:声明数组——>准备一个可以存储多个数据的容器
//数据类型[] 数组名; 或 数据类型 数组名[];
int[] nums;
String strs[];
//第二步:分配空间——>告诉数组中可以存储多少个数据
//数组名 = new 数据类型[数组元素个数];
nums = new int[3];
strs = new String[5];
//第三步:存储数据——>将数据存储在数组的指定位置(位置通过下标来确定,下标从0开始)
//数组名[下标] = 数据;
//将数据100 150 200依次存储到nums数组的第一个、第二个、第三个位置
nums[0]=100;//第一个位置的下标为0,第二个位置的下标为1,第三个位置的下标为2,以此类推
nums[1] = 150;
nums[2] = 200;
//nums[3] = 300;//ArrayIndexOutOfBoundsException:数组下标越界异常,因为数组长度固定之后,下标范围也就固定了,不能超过下标的范围
//将数据“Hello” “Java” “HTML” “大数据” “大湖名城,创新高地”存储到数组strs中
strs[0] = "Hello";
strs[1] = "Java";
strs[2] = "HTML";
strs[3] = "大数据";
strs[4] = "大湖名城,创新高地";
//第四步:操作数据
//通过数组名[下标]输出数组中指定位置的元素
System.out.println(nums);//直接输出数组名,输出的是数组在内存中的地址值,不会输出数组中的数据
System.out.println(strs);
System.out.println(nums[0]);
System.out.println(nums[1]);
System.out.println(nums[2]);
nums[2]*=3;//nums[2]=nums[2]*3;
System.out.println(nums[2]);
System.out.println(strs[0]);
System.out.println(strs[1]);
System.out.println(strs[2]);
System.out.println(strs[3]);
System.out.println(strs[4]);
}
}
package Learn1;
public class Demo02 {
//操作数组
public static void main(String[] args) {
//声明数组、分配空间合并写
//数据类型[] 数组名 = new 数据类型[数组长度]; 或 数据类型 数组名[] = new 数据类型[数组长度];
//声明一个长度为4的char类型的数组
char[] chars = new char[4];
//给数组元素赋值
//数组名[下标] = 数据;
chars[0] ='大';
chars[1] = '湖';
chars[2] = '名';
chars[3] = '城';
//操作数据: 数组名[下标]
//输出所有数据
System.out.println(chars[0]);
System.out.println(chars[1]);
System.out.println(chars[2]);
System.out.println(chars[3]);
//给chars数组的第四个元素重新赋值为'市'
chars[3] = '市';
System.out.println(chars[3]);
}
}
package Learn1;
public class Demo03 {
//操作数组
public static void main(String[] args) {
//声明数组、分配空间、赋值合并写
//数据类型[] 数组名 = new 数据类型[]{数据1,数据2,...,数据n}; //注意new后面的[]中不能写数组长度,因为数组长度是根据元素个数来确定的
//数据类型 数组名[] = new 数据类型[]{数据1,数据2,...,数据n};
//声明一个长度为3的boolean类型的数组,将数据true false false存储在数组中
boolean[] booleans =new boolean[]{true,false,false};
//操作数据: 数组名[下标]
System.out.println(booleans[0]);
System.out.println(booleans[1]);
System.out.println(booleans[2]);
System.out.println("---------------------");
//将数组中第二个值修改为true
booleans[1]=true;
System.out.println(booleans[0]);
System.out.println(booleans[1]);
System.out.println(booleans[2]);
System.out.println("---------------------");
//上面声明数组、分配空间、赋值的合并写法还可以简写
//数据类型[] 数组名 = {数据1,数据2,...,数据n}; //推荐此写法
//数据类型 数组名[] = {数据1,数据2,...,数据n};
//声明一个double类型数组,里面存储的数据有12.5 22.5 6.9 78.5
double[] nums ={12.5,22.5,6.9,78.5};
//操作数组中的数据
System.out.println(nums[0]);
System.out.println(nums[1]);
System.out.println(nums[2]);
System.out.println(nums[3]);
}
}
使用普通for循环遍历数组
package Learn2;
public class Demo01 {
public static void main(String[] args) {
//获取数组中元素的个数(数组的长度)
int[] nums ={11,25,63,48,19,33,26,87,93,45,11,20,66,55,99,17,10,33,59,68,80,40};
//数组名.length:可以获取数组元素个数
int size =nums.length;
System.out.println("nums数组中元素个数:"+size);
//遍历数组:按照元素下标顺序,输出所有元素
// System.out.println(nums[0]);
// System.out.println(nums[1]);
// System.out.println(nums[2]);
// ....
// System.out.println(nums[21]);
//上面输出所有元素,可以一个一个的输出,但是效率比较低,可以使用循环来实现
for(int i =0;i<nums.length;i++){
System.out.print(nums[i]+" ");
}
}
}
使用增强for循环遍历数组
package Learn2;
public class Demo02 {
/*
* 增强for循环:
* 语法结构:
* for(数据类型 变量名 : 数组名或者集合名){
* //操作变量的代码
* }
* 执行规律:
* 按照数组或者集合中的元素顺序依次取出元素,存储在变量中,这时候操作变量就是操作数组或者集合中的元素
* */
public static void main(String[] args) {
int[] nums ={11,25,63,48,19,33,26,87,93,45,11,20,66,55,99,17,10,33,59,68,80,40};
//使用增强for循环遍历数组
for(int a :nums){
System.out.print(a+" ");
}
}
}
经典案例
package Learn2;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//创建Scanner对象,用来输入数据到数组中
Scanner scanner =new Scanner(System.in);
//声明一个长度为5的int类型的数组,先不赋值
int[] nums = new int[5];
//使用增强for循环遍历数组
for(int a :nums){
System.out.print(a+" ");
}
System.out.println("\n------------------------");
// System.out.println("请输入第1个数据,存储到数组中第1个位置:");
// nums[0]=scanner.nextInt();
//
// System.out.println("请输入第2个数据,存储到数组中第2个位置:");
// nums[1]=scanner.nextInt();
//
// System.out.println("请输入第3个数据,存储到数组中第3个位置:");
// nums[2]=scanner.nextInt();
//
// System.out.println("请输入第4个数据,存储到数组中第4个位置:");
// nums[3]=scanner.nextInt();
//
// System.out.println("请输入第5个数据,存储到数组中第5个位置:");
// nums[4]=scanner.nextInt();
//上面赋值的代码可以使用循环的方式来实现
for(int i =0;i<nums.length;i++){
System.out.println("请输入第"+(i+1)+"个值,存储到数组中第"+(i+1)+"个位置:");
nums[i]=scanner.nextInt();
}
//使用增强for循环遍历数组
for(int a :nums){
System.out.print(a+" ");
}
}
}
package Learn2;
public class Demo04 {
public static void main(String[] args) {
/*
* 对数据进行处理:计算5位学生的平均分
* */
//将学生成绩存储在数组中
double[] scores = {98.5,96,99.5,89.2,100};
// double sum = scores[0]+scores[1]+scores[2]+scores[3]+scores[4];
//上面的操作虽然可以实现学生分数的累加,但是在这里只适用于少量学生操作,学生人数过多,不适合这种做法,可以使用循环的方式进行累加
//声明一个变量sum用来累加成绩
double sum = 0;
for(int i=0;i<scores.length;i++){
sum+=scores[i];//sum=scores[i]+sum;
}
//求平均分
System.out.println("学生成绩之和:"+sum);
double avg =sum/scores.length;
System.out.println("学生平均分:"+avg);
}
}
package Learn2;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
/*
* 有一个数列:8,4,2,1,23,344,12
* 循环输出数列的值
* 求数列中所有数值的和
* 猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
* */
//创建Scanner对象
Scanner scanner = new Scanner(System.in);
int[] nums = {8,4,2,1,23,344,12};
//循环输出数列的值
for(int a :nums){
System.out.println(a);
}
// 求数列中所有数值的和
//声明一个变量sum用来存储所有数据之和
int sum = 0;
for(int i=0;i< nums.length;i++){
sum+=nums[i];
}
System.out.println("数列中所有数值之和:"+sum);
//猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
System.out.println("请输入你要猜测的数字:");
int guess = scanner.nextInt();
//声明一个变量用来统计比较次数
int count = 0;
//比较的思想:通过循环的方式依次将数组中的元素取出来与你猜测的数据进行比较,如果有一个数字相同,说明数组中有你猜测的数字,如果比较到数组中最后一个数字,都与你猜测的数字不相同,说明数组中没有你要猜测的数字
for(int i =0;i<nums.length;i++){
if(nums[i]==guess){
System.out.println("数组中有你猜测的数字");
//一旦数组中有元素与猜测数字相同,就不需要继续往后比较,就可以结束循环,使用break实现
break;
}else{
// System.out.println("数组中没有你猜测的数字");
count++;
}
}
//判断比较次数是不是与数组长度相同,如果相同,说明数组中没有你要猜测的数字
if(count==nums.length){
System.out.println("数组中没有你猜测的数字");
}
}
}
package Learn2;
public class Demo06 {
/*
* 获取数组中的最大值:
* 1)假设数组中的第一个值为最大值
* 2)通过循环的方式,将数组中的元素依次取出来与这个假设的最大值进行比较,如果取出来的值比假设的最大值大,成为新的假设的最大值,然后拿着个新的假设的最大值继续往后比
* 一直比较到最后,就可以获取到数组中的最大值
*
* */
public static void main(String[] args) {
int[] nums = {12,56,78,32,96,44,11,82,7};
// //假设最大值为数组中的第一个值
int max = nums[0];//max=12
//
// //比较数组中第一个值与假设的最大值
// if(nums[0]>max){
// max=nums[0];
// }
// //比较数组中第二个值与假设的最大值
// if(nums[1]>max){
// max=nums[1];//max=56
// }
// //比较数组中第三个值与假设的最大值
// if(nums[2]>max){
// max =nums[2];//max=78
// }
// ......
// //比较数组中最后一个值与假设的最大值
// if(nums[nums.length-1]>max){
// max=nums[nums.length-1];
// }
//上面的操作是一步一步的从数组中获取元素与假设的最大值进行比较,如果数组中元素比较多,重复型操作代码太多,所以可以使用循环的方式来比较
for(int i =0;i<nums.length;i++){
//比较
if(nums[i]>max){
max=nums[i];
}
}
System.out.println("数组最大值:"+max);
}
}