java day04之数组

数组:

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

2.数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型 

3.数组属引用类型,数组型数据是对象,数组中的每个元素相当于该对象的成员变量

数组元素的引用:

1.定义并用运算符new为之分配空间后,才可以引用数组中的每个元素

2.数组元素的引用方式:数组名[数组元素下标]

    a:数组元素下标可以是整型常量或整型表达式,如a[3],b[i] ,c[6*i];

    b:数组元素下标从0开始:长度为n的数组的合法下标取值范围:0-->n-1

3.每个数组都有一个属性length指明他的长度,例如a.length指明数组a的长度(元素个数)

4.数组一旦初始化,其长度是不可变的。

5.数组之间的赋值,需要for循环来实现。

栈:存放局部变量,对象的引用。

堆:new出来的东西存放在堆内存中

数组的声明并初始化的几种方式

一维数组: 

(1)动态初始化

     ①:  int[] i=new int [12];

          i[0]=12;

 (2)静态初始化

      ②:int [] j=new int []{1,2,3};

二维数组:

(1)动态初始化

     ①String[][] str=new String[4][3];

     ②String [][]str1=new String [6][];

           str1[0]=new String[3];

           str1[1]=new String[5];

          ...

           str1[5]=new String[3];

(2)静态初始化

  int[][]arr=new int [][]{{1,2,3},{5,7},{3,8}};

关于数组元素的默认初始化值

1)byte short int long 而言:0

2)float double 而言:0.0

3)char 而言:空格

4)boolean而言:false

5)引用类型变量而言:null

数组的反转

(1)for(int i=0;i<arr.length/2;i++){

     int temp=arr[i];

     arr[i]=arr[arr.length-1-i];

     arr[arr.length-1-i]=temp;

  }

(2)for(int x=0,y=arr.length-1;x<y;x++,y--){

    int temp=arr[x];

    arr[x]=arr[y];

    arr[y]=temp;

}

数组的排序:

(1)插入排序:直接选择排序,折半插入排序,shell排序

(2)交换排序:冒泡排序,快速排序(或分区交换排序)

(3)选择排序:简单选择排序,堆排序

(4)归并排序:基数排序

定义数组以及数组的声明

package com.huake.java;

public class TestArray {
   public static void main(String [] args){
	   int j=12;
	   boolean b=true;
	   //1.如何来定义一个数组
	   //数组的声明 加个[]表明是一个数组
	   String[] names;
	   int [] scores;
	   //数组初始化
	   //第一种:静态初始化:初始化数组与给数组元素赋值同时进行
	   names=new String[]{"张三","李四","王五"};
	   //第二种:动态初始化:初始化数组与给数组赋值分开进行
	   scores=new int[4];
	   //如何调用相应的数组元素:通过数组元素的下角标的方式来调用。
	   //下角标从0开始,到n-1结束,其中n表示数组的长度。
	   scores[0]=87;
	   scores[1]=89;
	   scores[2]=90;
	   scores[3]=66;
	   //数组的长度,通过数组的length属性获得。
	   System.out.println(names.length);
	   System.out.println(scores.length);
	   //如何来遍历数组中的元素
	   for(int i=0;i<names.length;i++){
		   System.out.println(names[i]);
	   }  
   }
}

数组元素的默认初始化值

package com.huake.java;

public class TestArray1 {
  public static void main(String [] args){
	  String[] strs=new String[4];
	  strs[0]="AA";
	  strs[1]="BB";
	  strs[2]="CC";
	  strs[3]="DD";
	  //遍历数组元素
	  for(int i=0;i<strs.length;i++){
		  System.out.println(strs[i]);
	  }  
	  //基于基本数据类型的变量创建的数组:byte short int long float double char boolean
	  //对于byte short int long而言 创建数组后默认值为0
	  int [] scores=new int [4];
	  scores[0]=65;
	  scores[3]=89;
	  for(int i=0;i<scores.length;i++){
		  System.out.println(scores[i]);
	  }
	  
	  byte [] scores1=new byte [4];
	  scores1[0]=65;
	  scores1[3]=89;
	  for(int i=0;i<scores1.length;i++){
		  System.out.println(scores1[i]);
	  }
	  
	  //对于float double而言,他们的默认值为0.0
	  float [] f=new float[3];
	  f[0]=1.2f;
	  for(int i=0;i<f.length;i++){
		  System.out.println(f[i]);
	  }
	  //对于char类型而言 默认为空格
	  char [] c=new char[3];
	  for(int i=0;i<c.length;i++){
		  System.out.println(c[i]);
	  }
	  //对于boolean而言 默认是false
	  boolean[] b=new boolean[3];
	  for(int i=0;i<b.length;i++){
		  System.out.println(b[i]);
	  }
	  //对于引用类型的变量构成的数组,默认初始化值为null
	  String [] s=new String[3];
	  for(int i=0;i<s.length;i++){
		  System.out.println(s[i]);
	  }
  }
}

一维数组的练习

package com.huake.java;
/*
 *1.(1)定义类Pritimive,在类中定义一个有3个元素的boolean类型的数组t作为其成员变量
                数组元素未赋值
  定义类TestPritimive,在TestPritimive的main()方法中创建Pritimive对象d,输出其成员变量t的三个元素值
  练习目的:检验基本数据类型数组创建时的 自动赋值
  (2)给对象d的成员变量t赋值为{true,true,true},并输出t的三个元素值
  */
public class TestPritimive {
	public static void main(String [] args){
		//创建Pritimive对象
		Pritimive d=new Pritimive();
		//遍历d的数组元素
		for(int i=0;i<d.t.length;i++){
			System.out.println(d.t[i]);
		}
		//给d的数组元素重新赋值
		d.t[0]=true;
		d.t[1]=true;
		d.t[2]=true;
		for(int i=0;i<d.t.length;i++){
			System.out.println(d.t[i]);
		}
		
	}

}
class Pritimive{
	
	boolean [] t=new boolean[3];

}

一维数组之输出学生成绩及等级

package com.huake.java;
/*
          从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
	成绩>=最高分-10    等级为’A’   
	成绩>=最高分-20    等级为’B’
	成绩>=最高分-30    等级为’C’   
	其余                            等级为’D’
	
	提示:先读入学生人数,根据人数创建int数组,存放学生成绩。

 */
import java.util.Scanner;
public class TestStudentScore {

	public static void main(String[] args) {
		//1.创建Scanner的对象,并从键盘获取学生的个数
		Scanner s=new Scanner(System.in);
		System.out.println("请输入学生的个数:");
		int count=s.nextInt();
		//2.根据输入的学生的个数n,创建一个长度为n的int型的数组、
		int [] scores=new int[count];
	    int max=0;
		//3.依次从键盘获取n个学生的成绩,并赋给相应的数组元素,并获取n个学生中的最高分
	    System.out.println("请输入"+count+"个5学生成绩");
		for(int i=0;i<scores.length;i++){
			int score=s.nextInt();//依次从键盘获取学生的成绩
			scores[i]=score;
			if(scores[i]>max){
				max=scores[i];
			}
		}
		//4.遍历学生成绩的数组,并根据学生成绩与最高分的差值赋予相应的等级,并输出
		System.out.println("最高分为:"+max);
		for(int i=0;i<scores.length;i++){
			char level;
			if(scores[i]>=max-10){
				level='A';
			}else if(scores[i]>=max-20){
				level='B';
			}else if(scores[i]>=max-30){
				level='C';
			}else{
				level='D';
			}
			System.out.println("student"+i+"score is"+scores[i]+"grade is"+level);
		}

	}

}

二维数组的初始化及遍历 

package com.huake.java;

public class TestArray2 {
	public static void main(String[] args) {
		int [] score1=new int [10];
		int [][]score2;
		String [][]names;
		//1.二维数组初始化
		score2=new int [][]{{1,2,3},{3,4,5},{6}};//静态初始化
		
		names=new String[3][2];  //动态初始化方式一
		names=new String[6][];//动态初始化方式二
		names[0]=new String[5];
		names[1]=new String[4];
		names[2]=new String[7];
		names[3]=new String[5];
		names[4]=new String[8];
		names[5]=new String[4];
		//错误的初始化方式
		//names=new String[][];
		//names=new String[][5];
		//2.如何来引用具体的某一个元素
		int [][]i=new int [3][2];
		i[1][0]=90;
		i[2][1]=99;
		//3.数组的长度
		//二维数组的长度,length属性
		System.out.println(i.length); //3 相当于输出的是行数
		System.out.println(i[0].length);//2
		System.out.println(names.length);//6
		System.out.println(names[4].length);//8
		//4.如何遍历二维数组
		for(int m=0;m<score2.length;m++){  //控制行数
			for(int n=0;n<score2[m].length;n++){
				System.out.print(score2[m][n]);
				}
			System.out.println();
		}
	}

}

数组的常见异常

package com.huake.java;

public class TestException {
public static void main(String[] args) {
	 // 1.数组下标越界异常java.lang.ArrayIndexOutOfBoundsException
	  int []i=new int [10];
	  i[0]=0;
	  i[10]=9;
	  for(int m=0;m<=i.length;m++){  //遍历异常
		  System.out.println(i[m]);
	  }
	  //2.空指针异常java.lang.NullPointerException
	 //第一种
	  boolean [] b=new boolean[3];
	  b=null;  //相当于把b的地址改为null
	  System.out.println(b[0]);
	  //第二种
	  String[]str=new String[4];
	  System.out.println(str[3].toString());
      //第三种
	   int[][]j=new int[3][];
	   j[2][0]=12;
	   
   }
}

求二维数组元素的和

package com.huake.java;

public class TestGetSum {

	public static void main(String[] args) {
		int [][]m=new int[][]{{3,8,2},{2,7},{9,0,1,6}};
		int sum=0;
		for(int i=0;i<m.length;i++){
			for(int j=0;j<m[i].length;j++){
				System.out.print(m[i][j]+"\t");
				sum+=m[i][j];
			}
			System.out.println();
		}
		System.out.println("总和为:"+sum);

	}

}

打印杨辉三角

package com.huake.java;
/*
 * 用二维数组打印一个十行的杨辉三角*/
public class YangHuiSanJiao {

	public static void main(String[] args) {
		int [][]yangHui=new int [10][];
		
		//初始化二维数组
		for(int i=0;i<yangHui.length;i++){
			yangHui[i]=new int [i+1];
			
		}
		//现实的为二维数组的每个元素赋值
		for(int i=0;i<yangHui.length;i++){
			for(int j=0;j<yangHui[i].length;j++){
				yangHui[i][0]=yangHui[i][i]=1;
				if(i>1&&j>0&&j<i){
					yangHui[i][j]=yangHui[i-1][j]+yangHui[i-1][j-1];
				}
			}
		}
	
		//遍历二维数组
		for(int i=0;i<yangHui.length;i++){
			for(int j=0;j<yangHui[i].length;j++){
				System.out.print(yangHui[i][j]+"\t");
			}
			System.out.println();
		}

	}

}

求数组元素的最大值最小值总和平均值及数组的复制和反转

package com.huake.java;

public class TestArray3 {

	public static void main(String[] args) {
		int [] arr=new int []{12,43,9,0,-65,-99,100,9};
		//最大值
		int max=arr[0];
		for(int i=1;i<arr.length;i++){
			if(max<arr[i]){
				max=arr[i];
			}
		}
		System.out.println("最大值为:"+max);
		//最小值
		int min=arr[0];
		for(int i=1;i<arr.length;i++){
			if(min>arr[i]){
				min=arr[i];
			}
		}
		System.out.println("最小值为:"+min);
		//总值
		int sum=0;
		for(int i=0;i<arr.length;i++){
			sum+=arr[i];
		}
		System.out.println("总和为:"+sum);
		//平均数
		int avg=0;
		avg=sum/arr.length;
		System.out.println("平均值为:"+avg);
		//数组元素的复制
		int [] arr1=new int [arr.length];
		for(int i=0;i<arr1.length;i++){
			arr1[i]=arr[i];
		}
		for(int i=0;i<arr1.length;i++){
			System.out.print(arr1[i]+"\t");
		}
		System.out.println();
		//数组元素的反转
		for(int i=0;i<arr.length/2;i++){
			int temp=arr[i];
			arr[i]=arr[arr.length-1-i];
			arr[arr.length-1-i]=temp;
		}
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		
		

	}

}

使用冒泡排序或者直接选择排序对数组进行排序

package com.huake.java;

public class TestOrder {

	public static void main(String[] args) {
		int [] arr=new int []{12,23,-99,9,0,56,100,-45};
		//使用冒泡排序使数组元素从小到大排序
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-1-i;j++){
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
		System.out.println();
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		//使用直接选择排序
		for(int i=0;i<arr.length-1;i++){
			for(int j=i+1;j<arr.length;j++){
				if(arr[i]>arr[j]){
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
		System.out.println();
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值