Java二维数组

目录

二维数组

定义:

算法:

常见排序算法


二维数组

名词:长度,二维数组中一维数组的个数。(所以对二维数组直接使用length,得到的是一维数组的个数)

元素:一维数组

下标(索引):一维数组在二维数字中的位置

定义:

1.声名

数据类型 [ ] [ ] 数组名称;

2.创建 动态创建 

public class test{
	
	public static void main(String[] args) {
		
		String[][] nemaStrings=new String[][] {//数据类型[][] 数组名=new 数据类型[][]{值};
			{"火旺","白淼","高志坚"},//
			{"北风","骰子","红中"},//
			{"李岁","季灾","九条"},//
	
		};
		
		int[][] sum=new[3][3];//数据类型[][]数组名=new[x][y]//x:一维数组的个数,y:一维数组元素中的个数
	}
	

}

特点:可以声名与创建分开,也可以同时进行

静态创建:

	int [][] sum= {
			{1,2,3},
			{4,5,6},
			{7,8,9},
		};
		

特点:声名与创建必须同时进行

3.操作

改:

String[][]name=new String[][] {
			{"a","b","c","d"},
			{"e","f","g","h"},
			{"i","j","k","l"},			
		};
		
		name[1][2]="4";//改指定位置数据

           数组名[下标1][下标2]=值;1是第几行,2是第几列


     

		String[][]name=new String[][] {
			{"a","b","c","d"},
			{"e","f","g","h"},
			{"i","j","k","l"},			
		};
		
		name[1][2]="4";
		
		String[] name2=new String[] {"1","2","3","4"};//定义一个一维数组
		
		name[0]=name2;//可以改变二维数组中某一个一维数组,也就是整行
		

   查找:能改也能查,查找和改值的思路一致

特殊的,当二维数组只出现首个下标表示的是数组中的一维数据。

遍历的思路是两次for循环

int [][] sum=new int[][] {
			{1,2,3},
			{4,5,6},
			{7,8,9},
		};
		
		for(int i=0;i<sum.length;i++) {
			for(int j=0;j<sum[1].length;j++) {
				
				System.out.print("\t"+sum[i][j]);
				
			}
			System.out.println();
			
		}
		
		System.out.println("--------");
		
		for (int[] is : sum) {//外层(元素类型   元素变量:遍历对象)先把包含一维数组
			for (int is2 : is) {//内层遍历             先看作一维数组,所以元素类型为int[]
			System.out.print(" "+is2);//
				
			}
		System.out.println();	
		}
		
		
	
	}
	

}

两者都可成功。

练习:画一个杨辉三角

有以下性质,斜边都为1,元素值为上排相邻的数字之和

将其列为直角三角形,容易看出在二维坐标中,

H[j][k]=H[j-1][k-1]+H[j-1][k];

public class Dome2 {
	public static void main(String[] args) {
		int[][] yangH=new int[10][10];//	首先定义需要创建的三角大小,10为其两边
		for(int i=0;i<yangH.length;i++) {
			yangH[i][0]=1;//给最左边一排赋值为0
			for(int c=1;c<yangH[i].length;c++) {
				yangH[i][c]=0;//给除最左边的值都赋值为0
			}
		}		
		for(int j=1;j<yangH.length;j++) {//不能从元素yangH[i][0]或yangH[0][j]开始,会与公式相悖越界
			for(int k=1;k<yangH[j].length;k++)//从下标[1][1]的元素开始
			{			
				yangH[j][k]=yangH[j-1][k-1]+yangH[j-1][k];//带入公式
			}		
		}		
		for(int a=0;a<yangH.length;a++) {
			for(int b=0;b<yangH[a].length;b++) {				
				if(yangH[a][b]!=0)//	过滤掉0的元素				
				System.out.print("\t"+yangH[a][b]);//输出打印
			}			
			System.out.println("\n");			
		}
	}
}

算法:

软件就是算法+数据结构,

优点:可以提高计算机运算效率

例如

//原来的
		int sum = 0;
		for(int i = 1; i < 101; i++){
		sum = sum + i;
		}
		System.out.println(sum);
		数学公式:(首项+尾项)*项数/2
		int sum = (1+100)*100/2
		

可以看到此公式大大增加了计算机运作效率

如何判断算法是否优秀:

时间复杂度:代码执行的时长,越短越好

空间复杂度:代码在运行占用的内存,内存越少越好

常见排序算法

冒泡排序

思路,让一串数相邻之间的交换,第一遍遍历让最小的交换到最右或最左边,接下来把剩下的看为一个整体,继续交换。


public class maopao {
	public static void main(String[] args) {
		int[]arr=new int[] {10,9,88,12,7,76,34,57,109};
	
		szie(maoP(arr));

	}
	
	public static int[] maoP(int[]a) {
		int[]arr=a;
		int b=0;
		for(int i=0;i<a.length-1;i++) {//最小值冒上来
			
			for(int j=0;j<a.length-1;j++) {//内层
								
				if(a[j]<a[j+1]) {//第一轮交换//与相邻交换
				 b=a[j];
				a[j]=a[j+1];
				a[j+1]=b;
			}
						
			}
			
		}
		
		
		return arr;
		
	}
	public  static void szie(int []a) {
		
		for(int i=0;i<a.length;i++) {
			
			System.out.print(" "+a[i]);
		}
	}

}

选择排序

思路,把最大或最小的每次都和首个一个元素交换,第一次遍历完,最大或最小的存在于首位,再把剩下的看作一个整体,重复操作

public class xuanze {
	public static void main(String[] args) {
		int[]arr2=new int[] {10,9,88,12,7,76,34,57,109};
		
		ziez(arr2);
		System.out.println();
		ziez(xuanZ(arr2));
		
	}
	
	public static int[] xuanZ(int[]a) {
		
		int[] arr=a;
		
		for(int i=0;i<arr.length;i++) {
			
			for(int j=i+1;j<arr.length;j++)//选择排序与首位交换
			{
				if(arr[i]<arr[j]) {
					
					int tmp=arr[i];
					arr[i]=arr[j];
					arr[j]=tmp;
				
			}
				
			}		
		}
			
	return arr;
		
	}
	public static void ziez(int[]a) {
		for(int i=0;i<a.length;i++) {
			System.out.print(" "+a[i]);
		}
	}

}

不过java自带的排序算法封装在jre中使用的是快排     用法Arrays.sort(数组名);

import java.util.Arrays;

public class homework4 {
	public static void main(String[] args) {
		int[]arr=new int[] {10,9,88,12,7,76,34,57,109};
		
		tset(arr);
				Arrays.sort(arr);//用法Arrays.sort(数组名);
				
		tset(arr);
				
	}
	public static void tset(int[]a) {
		
		for(int i=0;i<a.length;i++) {
			System.out.print(" "+a[i]);			
		}
		System.out.println();
		
	}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值