栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习笔记-一维数组及经典应用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习笔记-一维数组及经典应用

目录
  • 一、初识数组
  • 二、数组的使用
  • 三、数组使用常见错误
  • 四、数组的使用练习
  • 五、求数组最大(小)值
  • 六、数组中插入元素


一、初识数组

还是通过一道例子来引入:
Java考试结束后,老师给张浩分配了一项任务,让他计算全班30人的Java考试平均分;

通过现有知识,我们也可以解决这个问题,分别定义30个变量,并对其赋值,最后将30个变量加起来除以30求平均值;不难发现,这样的方法太繁琐,如果是50个人,就要定义50个变量。还有一种方法是通过循环来解决,循环30次,这个方法是可行的,但只限于求出最后平均分;每次循环记录成绩的变量都要重新赋值,若要查找某个同学的成绩呢?可见循环并不能存储每个同学的成绩。
而数组就是用来同时存储多个数据,相当于一个变量存储多个值。可是变量和数组又有什么区别呢?声明一个变量就是在内存空间划出一块合适的空间;声明一个数组就是在内存空间中划出一串连续的空间;
更通俗点来讲,定义一个变量就相当于你去定宾馆,只定一个单人间;而定义一个数组就相当于你定一层楼的房间,那一层楼的房间都被你包了,一个房间就是一个存储单元,你定了连续的存储单元。

数组是一个变量,存储相同数据类型的一组数据;

数组的基本要素:
标识符:数组名称
数组元素
元素下标:从0开始
元素类型

数组长度固定不变,避免数组越界;
例如上图中:scores[4]越界了,最多到scores[3]


二、数组的使用

(1)声明数组:int[ ] a;
(2)分配空间:a = new int[5];
(3)赋值:a[0] = 8;
(4)处理数据:a[0] = a[0]*10;

(1)声明数组:告诉计算机数据类型是什么
   语法(两种写法都行):
    数据类型 数组名[ ];
    数据类型[ ] 数组名;
声明数组时不规定数组长度
(2)分配空间:告诉计算机分配几个连续的空间(声明数组与分配空间可以一步完成)
   语法(声明数组并分配空间):
    数据类型 [ ] 数组名 = new 数据类型[大小];
    数据类型 数组名[ ] = new 数据类型[大小];
数组元素根据类型不同,有不同的初始值;
int类型初始值为0,double类型初始值为0.0,String类型初始值为null
(3)赋值:向分配的格子里放数据
方法一:边声明边赋值
如:int [ ] scores = {89,79,76};
或者:int [ ] scores = new int [ ]{89,79,76};(在这里不能指定数组长度)
方法二:动态从键盘录入信息并赋值

Scanner input = new Scanner(System.in);
	for(int i = 0;i < 30;i++){
			scores[i] = input.nextInt();
		}		

(4)处理数据:如计算五个人的平均分(两种for循环方法)

int[] scores = {60,80,90,70,85};
int sum = 0;
double avg;
for(int i = 0;i < scores.length;i++){
	sum = sum + scores[i];		//通过遍历每个数组元素,并将其加到sum上
}
//for(int score:scores){		增强型的for(foreach),将scores中的每个元素拿出来放到score中,然后再加到sum里
//	sum += score;
//}
avg = sum / scores.length;

三、数组使用常见错误

常见错误1:

public class ErrorDemo1{
	public static void main(String[] args){
		int[] score = new int[];	//未声明数组长度
		score[0] = 89;
		score[1] = 63;
		System.out.println(score[0]);
	}
}

编译出错,没有写明数组的大小

常见错误2:

int[] scores = new int[2];	//scores[0]~scores[1]
scores[0] = 90;
scores[1] = 85;
scores[2] = 65;
System.out.println(scores[2]);

编译出错,数组越界

常见错误3:

int[] scores1 = new int[2];
scores1 = {60,80,90,70,85};
		
int[] scores2;
scores2 = {60,80,90,70,85};

编译出错,创建数组并赋值的方式必须在一条语句中完成

常见错误4:

int[] scores = new int[6];
for (int score : scores) {
	score = 9;
}
System.out.println(scores[0]);

增强型的for(foreach)只能用来遍历数组元素,而不能对数组进行赋值;要赋值用普通for循环


四、数组的使用练习

练习1:猜数游戏

例1:有一个数列:8,4,2,1,23,24,344,12
(1)循环输出数列的值
(2)求数列中所有数值的和
(3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数

分析:
(1)定义一个数组存储数列元素
(2)不需要改变数组元素的值,就用foreach就可以
(3)定义一个变量记录总和
(4)利用增强型for循环遍历数列,查找是否有对应的数字,可以用一个布尔类型的变量记录查找结果

import java.util.Scanner;

public class GuessData{
	public static void main(String[] args){
		//声明数组存储数据
		int[] list = new int[]{8,4,2,1,23,24,344,12};
		//循环输出数组元素的值,并且求和
		int sum = 0;
		for(int num : list){
			System.out.print(num + "t");
			sum += num;
		}
		System.out.println("nsum="+sum);
		
		//猜数
		Scanner input = new Scanner(System.in);
		System.out.print("请输入您要猜测的数字:");
		int guess = input.nextInt();
		boolean isCorrect = false;		//布尔类型记录猜测结果
		for(int num : list){
			if(guess == num){
				isCorrect = true;
				break;
			}
		}
		
		if(isCorrect){
			System.out.println("恭喜您,猜对了!");
		}else {
			System.out.println("您猜错了!");
		}
	}
}

练习2:购物金额输出

例2:数组存储5笔购物金额,在控制台输出并计算总金额;>分析:

(1)定义一个数组存储消费记录
(2)要输入数组元素,就不能用foreach,我们用普通for循环
(3)定义一个变量记录总金额
(4)利用for循环输出结果

import java.util.Scanner;

public class ShoppingList{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		System.out.println("请输入会员本月的消费记录");
		//记录用户的五笔消费金额
		double[] list = new double[5];
		for(int i=0;i
			System.out.print("请输入第"+(i+1)+"笔会员的消费金额:");
			list[i] = input.nextDouble();
		}
		
		//输出消费金额及总金额
		double sum = 0;
		System.out.println("序号tt金额(元)");
		for(int i=0;i
			System.out.println((i+1)+"tt"+list[i]);
			sum += list[i];
		}
		
		//输出总金额
		System.out.println("总金额:"+sum);
	}
}

五、求数组最大(小)值

例3:从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分;

分析:
(1)定义一个数组存储五位学生的成绩
(2)定义一个变量存储最高分,依次遍历比较

import java.util.Scanner;

public class GetMaxScore{
	public static void main(String[] args){
		int[] scores = new int[5];
		Scanner input = new Scanner(System.in);
		
		//学生考试成绩的录入
		for(int i = 0;i < scores.length;i++){
			System.out.print("请输入第"+(i+1)+"个同学的考试成绩:");
			scores[i] = input.nextInt();
		}
		
		//求数组中的最大值
		int max = scores[0];	//int min = scores[0];求最小值
		for(int i = 1;i < scores.length;i++){
			if(scores[i] > max){		//if(scores[i] < min){					
				max = scores[i];		//	min = scores[i];
			}							//}
		}
		System.out.println("考试成绩最高分为:"+max);
	}
}

求最低分,也就是求最小值,思路相同,


六、数组中插入元素

例4:有一组学员的成绩{99,85,82,63,60},将他们按降序排列。要增加一个学员的成绩,将它插入成绩序列,并保持降序;

分析:
(1)将成绩保存在数组里
(2)通过比较找到插入位置
(3)该位置元素往后移一位
(4)插入新成绩

import java.util.Scanner;

public class InsertNum{
	public static void main(String[] args){
		//数组长度是固定的,一旦定义无法修改,所以要预留位置
		int[] list = new int[6];
		list[0] = 99;
		list[1] = 85;
		list[2] = 82;
		list[3] = 63;
		list[4] = 60;
		
		//获取用户要插入的数值
		Scanner input = new Scanner(System.in);
		System.out.print("请输入要插入的数值:");
		int num = input.nextInt();
		
		//找到num要插入的位置index
		int index = list.length - 1;	//当插入数值比所有数值都小,就不需要移动
		for(int i = 0;i < list.length;i++){
			if(num > list[i]){
				index = i;
				break;
			}
		}
		
		//将index及之后的数据整体往后挪
		for(int i = list.length-1;i > index;i--){
			list[i] = list[i-1];
		}
		
		//在index位置插入num
		list[index] = num;
		
		for(int i = 0;i < list.length;i++){
			System.out.print(list[i]+"t");
		}
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号