1.1 数组概述
数组的概念:用来保存一组具有相同数据类型的数据的一种存储结构。
注意:数组也是一种数据类型,数组类型,属于引用数据类型
数组的定义语法:
1、 数据类型[ ] 数组名=new 数据类型[数组中存储数据个数];-----推荐使用该语法
2、 数据类型 数组名[ ]=new 数据类型[数组中存储数据个数];
3、 数据类型[] 数组名={值1,值2,…值n};
4、 数据类型[] 数组名=new 数据类型[]{值1,值2,…值n};
1.2 数组元素的打印
1、求数组最大值
需求说明:使用数组和循环获取5位学员的成绩,使用int max变量存储最大值。以“打擂台”的思路使用循环求出数组的最大值
Public class Demo1{
Public static void main(String[] args){
int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println("请输入五个学员的成绩:");
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
//在数组找出最大的成绩,第几个学生成绩最高
int max=scores[0];//默认第一个学生成绩最高
int idx=0;//保存最高分同学所在的位置
for (int i = 1; i < scores.length; i++) {
if(max<scores[i]){
max=scores[i];
idx=i;
}
}
System.out.println("第"+(idx+1)+"位同学成绩最高,分数是:"+max);
}}
2、向数组中插入一个元素
(1)将成绩保存在数组中;
(2)通过比较找到插入位置;
(3)该位置元素往后移一位;
(4)插入新成绩;
思路:1、要添加新成绩的数组必须是有序
2、查找新添加元素的插入位置
3、将位置腾出来
4、腾出来的位置放入新元素
Public class Demo1{
Public static void main(String[] args){
//直接存入有序的数据 长度4,最大的下标3
int[] scores_old={34,67,98,100};
//向scores数组中添加一个新成绩
int newScore=88;
//数组特征:长度固定,不能超过数组声明长度
//复制数组
int[] scores_new = Arrays.copyOf(scores_old, scores_old.length+1);
/*int[] scores_new=new int[scores_old.length+1];
for (int i = 0; i < scores_old.length; i++) {
scores_new[i]=scores_old[i];
}*/
//1.查找插入的合适的位置,比如保证原数组升序不变
int idx=scores_new.length-1;//保存要添加元素的下标
for (int i = 0; i < scores_new.length; i++) {
if(newScore <scores_new[i]){
idx=i;
break;
}
}
//挪动后面的元素
for (int i = scores_new.length-1-1; i >=idx ; i--) {
scores_new[i+1]=scores_new[i];
}
//在指定位置放入新成绩
scores_new[idx]=newScore;
System.out.println("插入新元素后的数据结果");
for (int i = 0; i < scores_new.length; i++) {
System.out.print(scores_new[i]+"\t");
}
}
}
3、获取最低价手机价格
需求说明:按照如下步骤:
(1)定义数组存储价格,并利用循环输入;
(2)定义变量min保存当前的最低价;
(3)将min和数组中的其余元素依次比较;
Public class Demo1{
Public static void main(String[] args){
int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println("请输入4家店的价格:");
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
//在数组找出最低价格
int min=scores[0];//默认第一个价格最低
int idx=0;//保存最低价格所在的位置
for (int i = 1; i < scores.length; i++) {
if(max<scores[i]){
max=scores[i];
idx=i;
}
}
System.out.println("第"+(idx+1)+"家店的最低,价格是:"+max);
}
}
4、冒泡排序
需求说明:冒泡排序时注意以下关键点:
(1)5个数字如何存放:(数组,数组.length = 5)
(2)控制比较多少轮:(外层循环,循环变量 i)
(3)控制每轮比较多少次:(内层循环,循环变量 j)
(4)交换数据;
Public class Demo1{
Public static void main(String[] args){
int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println("请输入五个学员的成绩:");
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
System.out.println("排序前的成绩:");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i]+"\t");
}
//排序(冒泡排序)
//原理:
for (int i = 0; i < scores.length-1; i++) {
for (int j = 0; j < scores.length-1-i; j++) {
if(scores[j] > scores[j+1]){
int temp =scores[j];
scores[j]=scores[j+1];
scores[j+1]=temp;
}
}
}
System.out.println();
System.out.println("排序后");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i]+"\t");
}
}
}
//方法2
public static void equalNum(){
int[] nums=new int[]{76,36,234,12,120,100};
System.out.println("排序前的数组为:");
for (int i=0;i<nums.length;i++){
System.out.print(nums[i]+"\t");
}
System.out.println();
for (int i=0;i<nums.length-1;i++){//控制比较的轮数
//j=0; -->(j+i=长度-1)
for (int j=i;j<nums.length-1;j++){ //内层循环才是 每轮真正的比较
if (nums[i]>nums[j+1]){
int temp=nums[i];
nums[i]=nums[j+1];
nums[j+1]=temp;
}
}
}
System.out.println("排序后的数组为:");
for (int i=0;i<nums.length;i++){
System.out.print(nums[i]+"\t");
}
}