-
课程的回顾
-
数组的定义与作用
-
创建与使用数组
-
数组的遍历
-
数组的案例解析
0、课程的回顾
1.方法与函数的创建方式
有四种:无参无返回值,无参有返回值,有参无返回值,有参有返回值
2.方法与函数调用
格式:方法名(实参1;实参2;实参3....);
比如:findMax(23,56,45);
注意:实参的个数与顺序及类型一定要与方法声明的时候的形参的个数、顺序、类型保持一致
package Shangke;
//.验证哥德巴赫猜想:任何一个大于6的偶数,都能分解成两个质数的和,要求输入一个整数,输出这个
// 数被被分解成哪两个质数的和。
//比如:12->7+5
import java.util.Scanner;
public class day2221 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个大于6的偶数:");
int even = sc.nextInt();
fing (even);
sc.close();
}
public static boolean geDe(int a ){
boolean flag=true;
for (int i=2;i<a;i++){
if (i%2==0){
break;
}
}//此处可以不用
if (flag){
flag=true ;
}
return flag ;
}
//2.将一个偶数分解为两个质数的和
public static void fing (int even){
if (even>6&&even%2==0){//8.38-3=5
for (int i=3;i<=even-3;i++){
//质数1+质数2=even
boolean c = geDe(i);//是质数1
boolean d = geDe(even-i);//是质数2
if (c&&d){//等价于啊&&b==true表达式
System.out.println(even+"="+i+"+"+(even-i));
// 终止循环
break;
}
}
}else{
System.out.println("判断的数不符合条件");
}
}
}
一、数组的定义与作用
数组是一种批量存储数据类型相同的数据的容器,方便存取大量,提高存储效率,大大节省空间,简化代码。
比如:要存取某个学校的所有学生的课程成绩,如果每个学生的成绩都定义一个变量来存取,非常不现实,此时只能使用数组来存取
创建数组的代码:int[] score =new int[3000];
二、创建与使用数组
1.根据数组存储的行列数,可以分为一维数组与多维数组(二维数组)
2.关于一维数组:存储了一行数据的数组
说明:数组是一种比较特殊的变量,他包含有两部分的空间,一个是保存数组地址的栈内存(后进先出)另一个是用于保存数组内容(数据)的堆内存。
2.1一维数组的创建与使用
数组的创建方式有两种:一种是动态方式,另一种是静态
格式一:动态方式:
数组类型[]数组名称=new数据类型[数组的长度/大小];
比如:int[] ages = new int[100];
存取数组中的数据:
//存数据
数组名称[位置号/索引号]=数值;
//取数据
数组类型 变量名=数组名[位置号/索引号];
说明:
(1)数组中存取的每一个数据又称为元素,
(2)每个元素在数组中是按顺序存放的,同时每个元素都有自己的位置号(索引号,下标)方便 找到他们
(3)每个元素的位置号(索引号)从0 开始,最大的索引号是数组的长度减1.
(4)在使用数组元素的时候,通过 数组名[索引号]来存取。
package Shangke;
public class day2222 {
public static void main(String[] args) {
//go1();
go2();
}
//1.1一维数组的创建,动态方式
public static void go1(){
//1.1创建一个长度为10的整型数组,其中最大的索引号为10-1=9
//其中的元素依次为ages[0],ages[1],ages[2],...ages[9],
//所有元素有默认的初始值,此处初始值为0
int[] ages=new int[10];
//1.2存取元素的值
ages[0]=16;
ages[1]=18;
ages[8]=20;
ages[9]=17;
System.out.println("ages[0]="+ages[0]);
System.out.println("ages[8]="+ages[8]);
// ages[10]=17;
// ages[11]=17;
int temp=ages[9]+2;
ages[8]+=3;
System.out.println("temp="+temp);
}
}
格式二:静态方式:
数组类型[]数组名称={元素1,元素2,元素3,....}
或
数组类型[]
数组名称=new 数组类型[]{元素1,元素2,元素3,....}
public class day2222 {
public static void main(String[] args) {
//go1();
go2();
}
//1.1一维数组的创建,动态方式
public static void go1(){
//1.1创建一个长度为10的整型数组,其中最大的索引号为10-1=9
//其中的元素依次为ages[0],ages[1],ages[2],...ages[9],
//所有元素有默认的初始值,此处初始值为0
int[] ages=new int[10];
//1.2存取元素的值
ages[0]=16;
ages[1]=18;
ages[8]=20;
ages[9]=17;
System.out.println("ages[0]="+ages[0]);
System.out.println("ages[8]="+ages[8]);
// ages[10]=17;
// ages[11]=17;
int temp=ages[9]+2;
ages[8]+=3;
System.out.println("temp="+temp);
//分步创建数组对象
int[]ss;//声明数组
//此数组中的元素new出后都有默认值为0
ss=new int [8];
ss[0]=20;
ss[2]=22;
ss[7]=25;
System.out.println("ss[2]="+ss[2]);
//输出默认值为0
System.out.println("ss[4]="+ss[4]);
//创建引用类型的数组,比如:String类型
//m
// String默认值为null。java中对象的默认值为null。可以作为对象是否存在有内容。
String []names=new String [8];
names [0]="小美";
names [1]="Tom";
names [2]="Ben";
names [7]="小帅";
System.out.println("names[7]="+names[7]);
System.out.println("names[3]="+names[3]);
//1.4创建double类型的数组,元素默认值都为0.0.
double[]money =new double[5];
money[0]=89999;
money[1]=666688;
money[2]=6757335.33f;
System.out.println("money[1]="+money[1]);
System.out.println("money[3]="+money[3]);
//1.5所有数组的长度都用length属性获取
System.out.println("数组ages的长度:"+ages.length);
System.out.println("数租ss的长度:"+ss.length);
System.out.println("数组names的长度:"+names.length);
//names.length-1就是names的最大下标,也就是最后一个元素
System.out.println("names的最后一个元素:"+names[names.length-1]);
}
//2.通过静态方式创建一维数组
public static void go2(){
//静态方式格式一
int []level={56,23,90,11,21};
//静态方式格式二
int[]score;
//错误score={56,23,90,11,21};
score=new int[]{50,23,90,11,21};
//从新给数组赋值或取值,操作和动态创建一样,都是用数组对象+下标去引用
level[1]=39;
level[3]=50;
//拿到最大的下标区最大的一个元素的值
level[level.length-1]=88;
int max= level.length-1;
level[max]=88;
System.out.println("level[max]="+level[max]);
System.out.println("score[max]="+score[score.length-1]);
System.out.println("level的长度="+ level.length);
}
}
三、数组的遍历
数组存储了大量的数据,经常会需要拿到所有元素的值,获取所有元素的操作法,成为遍历;
说明:遍历需要获取数组的长度,进而拿到最大下标;
数组长度=数组对象.length
数组最大下标=数组长度-1
遍历数组中需要用到for循环语句,可以从前往后,也可以的从后往前遍历数组元素
package Shangke;
public class day2223 {
public static void main(String[] args) {
// fore();
go();
}//main
//1.遍历整型数组
public static void fore() {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8,};
//数组元素的所有下标
// //每三个元素输出一行
for (int i = 0; i <= arr.length - 1; i++) {
System.out.print(arr[i] + "");
//从前往后遍历,i就是数组元素的所有下标
if ((i + 1) % 3 == 0) {
System.out.println();
}
}//fore1
System.out.println();
//从后往前遍历
for (int i = arr.length - 1; i >= 0; i--) {
System.out.print(arr[i] + "");
}
}
//2.遍历字符串数组
public static void go() {
String[] hero = {"青铜", "白银", "王者", "铂金", "钻石"};
// String str ="abcde";
// str.length;
//正序输出
for (int i = 0; i <= hero.length - 1; i++) {
System.out.print(hero[i]);
}
System.out.println();
System.out.println("----------------");
//2.反序输出
for (int i = hero.length - 1; i >= 0; i--) {
System.out.print(hero[i] );
}
public static void go3(){
Scanner sc = new Scanner(System.in);
String[] names=new String[5];
//循环赋值
for(int i=0;i<names.length;i++){
System.out.print("请输姓名:");
names[i]=sc.next();
}
//遍历字符串数组
for(int i=0;i<names.length;i++){
System.out.print(names[i]+" ");
}
//关闭
sc.close();
}
}
}
}
四、数组的应用与Arrays工具
4.1数组的应用
遍历数组,数组元素的最大最小值得元素,求和,求平均,找某个元素等
package Shangke;
import java.util.Arrays;
public class day2225 {
public static void main(String[] args) {
play();
}
//遍历数组,数组元素的最大最小值得元素,求和,求平均,找某个元素等
public static void play(){
int[] arr={1,2,3,4,5,7,6,8,9,10};
//找最大最小值
findmaxmin(arr);
// calcSumAvg(arr);//求和
//排序
dispArr(arr);
Arrays.sort(arr);
dispArr(arr);
}
//找到数组中最大最小值并输出他们
//如果有返回值则void应该改为int
public static void findmaxmin(int[]arr){//arr是形参,可以和之后实参名相同
//1,2,3,4,5,6,7,8,9,10
//那第一个元素,作为计较参考值
int max=arr[0];
// int maxIndx=0
int min =arr[0];
for(int i =0;i< arr.length;i++){
if (max<arr[i]){
max=arr[i];
}
if (min>arr[i]){
min=arr[i];
}
}
System.out.println("最小值是:"+min);
System.out.println("最大值是:"+max);
}
//求元素的和及平均值
public static void calcSumAvg(int[] arr) {
int sum=0;
for(int i =0;i< arr.length;i++){
//sum=sum+arr[i];
//求和
sum=sum+arr[i];
}//for
System.out.println("和值:"+sum);
System.out.println("平均值:"+sum/ arr.length);
}
//专门遍历数组
//传一个数组对象,作为形参
public static void dispArr(int[]arr){//传一个数组变量参数
for(int i =0;i< arr.length;i++){
System.out.print(arr[i]+"");
}
System.out.println();
}
}
4.2 Arrays工具使用
从大到小排序:代码如下
int[] arr ={12,10,9,14,15};
Arrarys.sort(arr);