Java基础总结5

Java基础总结5

1.多维数组

 public class FirstDemo{

 /**

定义多维数组的语法:

数据类型[][]数组名=new 数据类型[行数][列数];

数据类型 数组名[][]=new 数据类型[行数][列数];

访问数组中元素的值 通过下标

数组名[行下标][列下标]=值;

数组初始化完毕后有默认值null

初始化数组的同时直接赋值

二维数组初始化的时候必须指定行数 列数可以省略

语法:

数据类型[][]数组名={{元素,元素},{元素,元素},{元素,元素},{元素,元素}};

元素必须和数据类型保持一致

 */

 //入口方法

 public static void main(String[]args){

 //初始化一个3行2列的String类型的数组

 //数组下标从0开始

 String[][]arr=new String[3][2];

 //给二维数组赋值

 //给第一行赋值

 arr[0][0]="淡酒";

 arr[0][1]="灵芷";

 //给第二行赋值

 arr[1][0]="大师兄";

 arr[1][1]="秦时风";

 //给第三行赋值

 arr[2][0]="尊";

 arr[2][1]="青蛙";

 //取出二维数组中的值,通过下标

 String tmp=arr[1][1];

 System.out.println(tmp);

 System.out.println(arr[0][1]);

 //修改数组中的元素 通过下标

 arr[2][1]="夕颜";

 //遍历输出二维数组中所有元素

 //外层循环控制行数

 for(int row=0;row<3;row++){

 //内层循环控制列数

 for(int col=0;col<2;col++){

 System.out.print(row+"\t"+col+"\t"+arr[row][col]+"\t");

 }

 System.out.println();

 }

 //初始化一个二维数组并赋值

 int[][]num={{1,11},{12,21,32},{33}};

 //遍历输出二维数组中所有元素

 //外层循环控制行数

 for(int row=0;row<num.length;row++){

 //内层循环控制列数

 for(int col=0;col<num[row].length;col++){

 //取出一维数组的长度是num.length

 //把二维数组抽象为一维数组 长度就为num[row].length

 System.out.print(num[row][col]+"\t");

 }

 System.out.println();

 }

 /**

foreach遍历二维数组

 */

 for(int []temp:num){//取出所有行

for(int s:temp){

System.out.print(s+"\t");

}

 //换行操作

 System.out.println();

 }

 //二维数组初始化的时候必须指定行数

 int [][]arr1=new int[2][];

 int [][]arr2=new int[][]{{2,34,65},{11,21}};

 //给指定行分配指定的列数

 arr1[0]=new int[2];

 arr1[1]=new int[3];

 }

 }

输出结果:

练习题

 import java.util.*;

 public class Practice1{

 //入口方法

 public static void main(String[]args){

 //1.有5个班各5名学生某门课程的成绩,如何计算5个班各自的总成绩和平均成绩?

 System.out.println("1.求成绩");

 //初始化键盘录入对象

 Scanner in=new Scanner(System.in);

 //初始化一个5行5列的二维数组

 int [][]score=new int[5][5];

 //外层循环控制行数

 for(int row=0;row<5;row++){

 System.out.println("******第"+(row+1)+"个班级*******");

 //内层循环控制列数

 for(int col=0;col<5;col++){

 //System.out.print("请输入第"+(col+1)+"名学生的成绩:");

 //给数组赋值

 //score[row][col]=in.nextInt();

 System.out.println("请输入第"+(col+1)+"名学生的成绩:");

 //生成1个1-100的随机数,并给数组赋值

 score[row][col]=(int)(Math.random()*100+1);

 }

 }

 //打印成绩

 //外层循环控制行数

 for(int row=0;row<5;row++){

 int sum=0;

 System.out.println("*******第"+(row+1)+"个班级*******");

 //内层循环控制列数

 for(int col=0;col<5;col++){

 //求总成绩

 sum+=score[row][col];

 //给数组赋值

 System.out.println("第"+(col+1)+"名学生的成绩是:"+score[row][col]);

 }

 System.out.println("第"+(row+1)+"班的总成绩为:"+sum);

 System.out.println("第"+(row+1)+"班的平均成绩为:"+sum/5);

 }

 //2.求对角线之和

 System.out.println("2.求对角线之和");

 //初始化一个3行3列的二维数组

 int[][]num=new int[3][3];

 int sum1=0;

 //给数组赋值

 //外层循环控制行数

 for(int row=0;row<3;row++){

 //内层循环控制列数

 for(int col=0;col<3;col++){

 //生成1个1-100的随机数,并给数组赋值

 num[row][col]=(int)(Math.random()*100+1);

 }  

 }

 //输出矩阵

 //外层循环控制行数

 System.out.println("3*3矩阵");

 for(int row=0;row<3;row++){

 //内层循环控制列数

 for(int col=0;col<3;col++){

 System.out.print(num[row][col]+"\t");

 //判断元素在对角线上

 if(col==row||col+row==2){

 //求和

 sum1+=num[row][col];

 }

 }

 //换行操作

 System.out.println();

 }

 System.out.println("对角线之和为:"+sum1);

 //3.矩阵变换

 System.out.println("3.矩阵变换");

 //初始化一个2行3列的二维数组

 int[][]num1=new int[2][3];

 //给数组赋值

 //外层循环控制行数

 for(int row=0;row<2;row++){

 //内层循环控制列数

 for(int col=0;col<3;col++){

 //生成1个1-100的随机数,并给数组赋值

 num1[row][col]=(int)(Math.random()*100+1);

 }

 }

 //输出原始矩阵

 //外层循环控制行数

 System.out.println("原始矩阵");

 for(int row=0;row<2;row++){

 //内层循环控制列数

 for(int col=0;col<3;col++){

 System.out.print(num1[row][col]+"\t");

 }

 //换行操作

 System.out.println();

 }

 //初始化一个3行2列的二维数组

 int[][]num2=new int[3][2];

 //给数组赋值

 //外层循环控制行数

 for(int row=0;row<3;row++){

 //内层循环控制列数

 for(int col=0;col<2;col++){

 num2[row][col]=num1[col][row];

 }

 }

 //输出原始矩阵

 //外层循环控制行数

 System.out.println("转换后的矩阵");

 for(int row=0;row<3;row++){

 //内层循环控制列数

 for(int col=0;col<2;col++){

 System.out.print(num2[row][col]+"\t");

 }

 //换行操作

 System.out.println();

 }

 //4.打印杨辉三角

 System.out.println("4.打印杨辉三角");

 //初始化一个10行的二维数组

 int [][]arr=new int[10][];

 //外层循环控制行数

 for(int row=0;row<10;row++){

 //给指定行分配列数

 arr[row]=new int[row+1];

 //内层循环控制列数

 for(int col=0;col<=row;col++){

 //提取数值不为1的元素

 if(row>1&&col>0&&col<row){

 //计算数值

 arr[row][col]=arr[row-1][col-1]+arr[row-1][col];

 }else{

 arr[row][col]=1;

 }

 System.out.print(arr[row][col]+"\t");

 }

 //换行操作

 System.out.println();

 }

 //杨辉三角解法2

 for(int row=0;row<10;row++) {

            int number = 1;

            //打印空格字符串

            System.out.format("%"+(10-row)*2+"s","");

            for(int col=0;col<=row;col++) {

                 System.out.format("%4d",number);

                 number = number * (row - col) / (col + 1);                

            }

            System.out.println();

        }

 }    

 }

输出结果:

2.数组算法

 public class SecondDemo{

 /**

 冒泡排序,两两进行比较,符合条件交换位置

 比较轮数=长度-1

 比较次数=长度-1-当前轮数

 */

 /**

 选择排序

 选择某个索引位置的元素,然后和后面元素依次比较,

 若大于则交换位置,经过第一轮比较排序后可得出最小值。

 */

 /**

 插入排序

 [2,3,4,1,23,12,43]

 1.有序 2

 2.无序 3,4,1,23,12,43

 将无序列表的值放入有序列表

 2 3

 2 3 4

 1 2 3 4

 1 2 3 4 23

 1 2 3 4 12 23

 1 2 3 4 12 23 43

 先把整个数组看成一个列表

 把列表分为两部分 有序和无序

 拿无序的数据放到有序列表,然后进行比较,放在合适的位置

 */

 /**

 方式1:线性搜索(从头搜到尾/从尾搜到头):indexOf/lastIndexOf

 对于元素过多的数组,性能极低:有N个元素,循环次数= (N + 1) / 2;

 方式2:二分搜索法/二分查找法/折半查找.

 前提:数组元素必须有顺序.

 */

 //入口方法

 public static void main(String[]args){

 //冒泡排序

 //初始化一个一维数组

 System.out.println("冒泡排序");

 int []arr={2,4,45,3,9,72};

 //比较是拿当前的数和下一个数进行比较

 //第一轮比较 2,4,3,9,45,72 比较5次

 //第二轮比较 2,3,4,9,45 比较4次

 //第三轮比较 2,3,4,9 比较3次

 //第四轮比较 2,3,4 比较2次

 //第五轮比较 2,3 比较1次

 //调用方法

 bubbleSort(arr);

 //选择排序

 System.out.println("选择排序");

 int []num={13,43,54,12,6,8};

 

 list(num);

 System.out.println("排序后数列");

 //执行方法

 selectionSort(num);

 //插入排序

 System.out.println("插入排序");

 int []numb={23,4,12,76,3,56};

 insertSort(numb);

 list(numb);

 //查找元素

 System.out.println("二分查找");

 System.out.println(binarySearch(numb,12));

 }

 //冒泡排序

 public static void bubbleSort(int[]arr){

 //外层循环控制比较轮数 比较轮数=长度-1=arr.length-1

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

 //内层循环控制比较次数 每轮比较都可以找到最大数/最小数

 //比较次数=长度-1-当前轮数

 for(int j=0;j<arr.length-1-i;j++){

 //比较arr[j] arr[j+1] 当前数和下个数进行比较

 if(arr[j]<arr[j+1]){

 //交换位置

 int tmp=arr[j];

 arr[j]=arr[j+1];

 arr[j+1]=tmp;

 }  

 }

 //查看数组元素

 list(arr);

 }

 }  

 //选择排序

 public static void selectionSort(int []num){

 //1.比较的轮数的=数组长度-1

 //外层循环控制轮数

 for(int i=0;i<num.length-1;i++){

 //声明一个变量 默认将最小数的下标存起来

 int p=i;//最小数的下标

 //内层循环控制比较次数

 //当前的最小数/最大数 给后边所有数进行比较

 for(int j=i+1;j<num.length;j++){

 //p对应的元素和j对应的元素进行比较

 if(num[p]>num[j]){

 //将指针移动到j

 p=j;

 }

 }

 //一轮比较结束后,需要将最大值/最小值放在i的位置

 //判断p位置是否移动

 if(p!=i){//交换p和i的元素

 swap(num,p,i);

 }

 //第一轮比较结束后的结果是

 list(num);

 }

 }  

 //插入排序

 public static void insertSort(int[]numb){

 //比较的轮数=numb.length-1;

 for(int i=0;i<numb.length-1;i++){

 //插入的数据和以前的数据进行比较

 for(int j=i+1;j>0;j--){

 if(numb[j]<numb[j-1]){

 swap(numb,j,j-1);  

 }else{

 break;

 }

 }

 list(numb);

 }  

 }

 //二分查找法 要求数组都是有序的

 public static int binarySearch(int[]arr,int element){

 //声明两个下标 最低位和最高位

 int low=0;//低

 int hig=arr.length-1;//高位

 while(low<=hig){

 //1.找到中间下标

 int mid=(low+hig)/2;

 //2.取出中间值和element比较

 if(arr[mid]==element){

 return mid;

 }else if(arr[mid]<element){//猜小了

 low=mid+1;//最低位下标右移  

 }else{//猜大了

 hig=mid-1;//最高位下标左移

 }

 }

 //没找到

 return -1;

 }

 

 //交换数组元素的位置

 public static void swap(int[]num,int firstIndex,int lastIndex){

 //声明一个变量

 int tmp=num[firstIndex];

 num[firstIndex]=num[lastIndex];

 num[lastIndex]=tmp;

 }

 //遍历数组

 public static void list(int[]num){

 for(int tmp:num){

 System.out.print(tmp+"\t");

 }

 System.out.println();

 }

 }

输出结果:

3.Java自带数组工具类Arrays

 import java.util.*;

 public class ThirdDemo{

 /*  

 Java自带数组工具类Arrays

 int binarySearch(type[] arr,type key)

使用二分法查找数组里某元素并返回其索引,若找不到返回负数.

 void sort(type[] arr)

使用调优后的快速法对指定数组排序。

 String toString(type[] arr)

返回指定数组内容的字符串表示形式。

 public static type[] copyOf(type[] original, int newLength)

复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。

 */

 //入口方法

 public static void main(String[]args){

 //初始化一个数组

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

 //1.将数组转换成String类型

 String str=Arrays.toString(arr);

 System.out.println(str);

 //2.对数组进行排序

 Arrays.sort(arr);

 System.out.println("排序后的数组"+Arrays.toString(arr));

 //3.查找指定的元素

 System.out.println(Arrays.binarySearch(arr,3));

 //4.复制一个新的数组

 int[]newArr=Arrays.copyOf(arr,4);

 System.out.println(Arrays.toString(newArr));

 //5.将数组元素填充指定元素

 Arrays.fill(newArr,666);

 System.out.println(Arrays.toString(newArr));  

 }

 }

输出结果:

4.numayUtil类常用方法

 public class FourDemo{

 /**

  numayUtil类常用方法

 讨论的都是int类型数组:

打印数组元素:print方法

颠倒数组元素:reverse

获取元素索引:indexOf/lastIndexOf

获取元素最值:getMax/getMin

拷贝数组元素: numaycopy

数组元素排序:sort

二分查询方法:binarySearch

 */

 //入口方法

 public static void main(String[]args){

 //初始化一个数组

 int []num={23,12,34,21,7,4,44};

 //调用print方法

 print(num);

 //调用reverse方法并输出

 reverse(num);

 //调用indexs方法查找索引

 int n=indexs(num,22);

 if(n==-1){

 System.out.println("该数不在数组中");

 }else{

 System.out.println("索引为:"+n);

 }

 //调用getMax方法

 System.out.println("最大数为:"+getMax(num));

 //调用getMin方法

 System.out.println("最小数为:"+getMin(num));

 //调用numaycopy方法

 numaycopy(num);

 //调用sort方法排序

 sort(num);

 //调用binarySearch方法

 int []num1={23,44,32,123,435,65,45};

 int m=binarySearch(num1,44);

 print(num1);

 if(m==-1){

 System.out.println("该数不在数组中");

 }else{

 System.out.println("索引为:"+m);

 }

 }

 //打印数组元素:print方法

 public static void print(int[]num){

 for(int tmp:num){

 System.out.print(tmp+"\t");

 }

 System.out.println();

 }

 //颠倒数组元素:reverse

 public static void reverse(int[]num){

 int []num1=new int[num.length];

 for(int i=0;i<num.length;i++){

 num1[i]=num[num.length-1-i];

 }

 print(num1);

 }

 //获取元素索引:indexOf/lastIndexOf

 public static int indexs(int []num,int query){

 for(int i=0;i<num.length;i++){

 if(query==num[i]){

 return i;  

 }  

 }

 return -1;

 }

 //获取最大值:getMax

 public static int getMax(int[]num){

 int tmp=0;

 for(int i=0;i<num.length-1;i++){

 if(num[i]>num[i+1]){

 tmp=num[i];

 num[i]=num[i+1];

 num[i+1]=tmp;

 }

 }

 return num[num.length-1];

 }

 //获取最小值:getMin

 public static int getMin(int[]num){

 int tmp=0;

 for(int i=0;i<num.length-1;i++){

 if(num[i]<num[i+1]){

 tmp=num[i];

 num[i]=num[i+1];

 num[i+1]=tmp;

 }

 }

 return num[num.length-1];

 }

 //拷贝数组元素: numaycopy

 public static void numaycopy(int[]num){

 int []num1=new int[num.length];

 for(int i=0;i<num.length;i++){

 num1[i]=num[i];

 }

 print(num1);

 }

 //数组元素排序:sort

 public static void sort(int[]num){

 //外层循环控制比较轮数

 for(int i=0;i<num.length-1;i++){

 //内层循环控制比较次数 每轮比较都可以找到最大数/最小数

 //比较次数=长度-1-当前轮数

 for(int j=0;j<num.length-1-i;j++){

 //比较 num[j]  num[j+1] 当前数和下个数进行比较

 if( num[j]<num[j+1]){

 //交换位置

 int tmp=num[j];

 num[j]=num[j+1];

 num[j+1]=tmp;

 }  

 }  

 }

 //查看数组元素

 print(num);

 }  

 //二分查询方法:binarySearch

 public static int binarySearch(int[]num,int element){

 //声明两个下标 最低位和最高位

 int low=0;//低

 int hig=num.length-1;//高位

 while(low<=hig){

 //1.找到中间下标

 int mid=(low+hig)/2;

 //2.取出中间值和element比较

 if(num[mid]==element){

 return mid;

 }else if(num[mid]<element){//猜小了

 low=mid+1;//最低位下标右移  

 }else{//猜大了

 hig=mid-1;//最高位下标左移

 }

 }

 //没找到

 return -1;

 }

 }

输出结果:

5.知识框架

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值