JaveSE基础之二维数组及练习题

一、查找

线性查找

用于数字个数量不大的时候

public class Demo12 {

	public static void main(String[] args) {
		int[] nums= {23,1,45,89,203,49};
		int n=4;
		boolean f=false;//false 没找到  true找到了
		for (int i = 0; i < nums.length; i++) {
			if(nums[i]==n) {
				System.out.println("找到了");
				f=true;
				break;
			}
		}
		if(!f) {
			System.out.println("没找到");
		}
	}

}

二分查找

在有序的数列基础查找的

public class Demo13 {

	public static void main(String[] args) {
		int[] nums= {1,24,35,46,57,78,90,98};
		int n=98;
		int start=0;
		int end=nums.length-1;
		int mid;
		boolean f=false;//false没找到 true找到了
		do {
			mid=(start+end)/2;
			if(nums[mid]==n) {
				System.out.println("找到了");
				f=true;
				break;
			}else if(nums[mid]<n) {
				start=mid+1;
			}else {
				end=mid-1;
			}
		}while(start<=end);
		if(!f) {
			System.out.println("没找到");
		}
	}

}

二、二维数组

定义数组,然后对其遍历:
方法一:

public class Demo01 {

	public static void main(String[] args) {
		int[][] nums=new int[3][];
		String[][] strs=new String[4][5];
		
		nums[0]=new int[] {1,2,3};
		nums[1]=new int[] {23,4,12};
		nums[2]=new int[] {1};
		
		boolean[][] ds= {
				{true,false,true},
				{true,false},
				{false}
		};
		
		//遍历  nums[][]
		System.out.println(nums.length);
		for (int i = 0; i < nums.length; i++) {
			int[] n=nums[i];
			for (int j = 0; j < n.length; j++) {
				System.out.print(n[j]+" ");
			}
			System.out.println();
		}
	}
}

方法二:

public class Demo01 {

	public static void main(String[] args) {
		int[][] nums=new int[3][];
		String[][] strs=new String[4][5];
		
		nums[0]=new int[] {1,2,3};
		nums[1]=new int[] {23,4,12};
		nums[2]=new int[] {1};
		
		boolean[][] ds= {
				{true,false,true},
				{true,false},
				{false}
		};
		
		//遍历  nums[][]
			
			for (int j = 0; j < nums[i].length; j++) {
				System.out.print(nums[i][j]+" ");
			}
			System.out.println();
		}	
	}
}

键盘输入赋值,进行遍历:

public class Demo01 {

	public static void main(String[] args) {
		double[][] dd=new double[2][3];
		Scanner input=new Scanner(System.in);
		for (int i = 0; i < dd.length; i++) {
			for (int j = 0; j < dd[i].length; j++) {
				dd[i][j]=input.nextDouble();
				System.out.print(dd[i][j]+"  " );
			}
			System.out.println();
		}
}

二维数组练习题

求最大的行和列

编写一个程序,在一个4*4的矩阵中随机填入0和1,打印该矩阵,找到一个具有最多1的行和列。下面是程序运行示例:
0010
0011
1101
1010
最多1的行是:2
最多1的列是:2

package se0606;

import java.util.Scanner;

public class Demo02 {

	public static void main(String[] args) {
		int[][] nums=new int[4][4];
		Scanner input=new Scanner(System.in);
		//循环输入,给二维数组赋值
		for (int i = 0; i < nums.length; i++) {
			for (int j = 0; j < nums[i].length; j++) {
				nums[i][j]=input.nextInt();
			}
		}
		//求最多1 的行
		int max=0;
		int row=0;//最多1对应的row的下标
		for (int i = 0; i < nums.length; i++) {
			int count=0;//存储每一行1的个数
			for (int j = 0; j < nums[i].length; j++) {
				if(nums[i][j]==1) {
					count++;
				}
			}
			//求最值
			if(max<count) {
				max=count;
				row=i;
			}
		}
		//求最多1 的列
		int lie=nums[0].length;
		int max2=0;//最多1的个数
		int column=0;//1最多的列
		for (int i = 0; i < lie; i++) {//遍历每一列
			//遍历这一列的每一行
			int cCount=0;//每一列的1的个数
			for (int j = 0; j < nums.length; j++) {
				if(nums[j][i]==1) {
					cCount++;
				}
			}
			if(max2<cCount) {
				max2=cCount;
				column=i;
			}
		}
		System.out.println("最多1的行是:"+row);
		System.out.println("最多1的列是:"+column);
		
		
	}

}

判断一个数组是否有序

package se0606;
//判断一个数组是否有序
public class Demo03 {

	public static void main(String[] args) {
//		int[] nums= {1,2,3,4,5,16,7,8,9};
		int[] nums= {9,8,7,6,6,4,3,2,1,0};
		int count1=0;//记录<=的次数
		int count2=0;//记录>=的次数
		for (int i = 0; i < nums.length-1; i++) {
			if(nums[i]<=nums[i+1]) {
				count1++;
			}
			if(nums[i]>=nums[i+1]) {
				count2++;
			}
		}
		if(count1==nums.length-1
				||count2==nums.length-1) {
			System.out.println("该数列有序");
		}else {
			System.out.println("该数列无序");
		}

	}

}

打印不同的数

编写一个程序,读入10个数并且显示互不相同的数(即一个数出现多次,但仅显示一次)输入之后,数组包含的都是不同的数。

package se0606;

import java.util.Scanner;

public class Demo04 {

	public static void main(String[] args) {
		int[] nums=new int[10];
		//从键盘输入10个数
		int index=0;
		Scanner input=new Scanner(System.in);
		for (int i = 0; i < nums.length; i++) {
			int num=input.nextInt();
			//判断下数组中是否已经存储了num
			boolean f=false;//false 没 true 已经有了
			for (int j = 0; j < index; j++) {
				if(nums[j]==num) {
					f=true;
					break;
				}
			}
			if(f)continue;
			nums[index]=num;//确保数组中没有num的时候,才赋值
			index++;
		}
		//1 3 3 4 3 2 0 2 1 5
		int[] nums2= new int[index];
		for (int i = 0; i < index; i++) {
			nums2[i]=nums[i];
		}
		for (int i : nums2) {
			System.out.print(i+"  ");
		}
	}

}

判断一个数组中是否有四个连续相同的数

方法一:

package se0606;

public class Demo05 {

	public static void main(String[] args) {
		int[] nums= {1,1,1,2,3,4,4,4,3,6,6,6};
		boolean flag=true;//flase 没有四个连续的数 true有
		for (int i = 0; i < nums.length-3; i++) {
//			boolean f=true;//true 想等 false不等
			flag=true;
 			for (int j = i+1; j <=i+3; j++) {
				if(nums[i]!=nums[j]) {
					flag=false;
					break;
				}
			}
 			if(flag) {
 				System.out.println("有四个连续的数");
 				flag=true;
 				break;
 			}
		}
		if(!flag) {
			System.out.println("没有");
		}
	}

}

方法二:

package se0606;

public class Demo06 {

	public static void main(String[] args) {
		int[] nums= {1,1,1,2,3,4,4,4,3,6,6,6,6};
		int count=1;
		boolean f=false;//true 有  false 没有
		for (int i = 1; i < nums.length; i++) {
			if(nums[i]==nums[i-1]) {
				count++;
				if(count==4) {
					f=true;
					break;
				}
			}else {
				count=1;
			}
		}
		if(f) {
			System.out.println("有四个连续的数");
		}else {
			System.out.println("没有");
		}

	}

}

游戏:豆机

package se0606;

import java.util.Scanner;

public class Demo07 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("请输入小球的个数:");
		int balls=input.nextInt();
		System.out.println("请输入槽子的个数:");
		int caozi=input.nextInt();
		
		int[] caos=new int[caozi];
		for (int i = 0; i < balls; i++) {
			String path="";
			int count=0;
			for (int j = 0; j < caozi-1; j++) {
				//[0.0,1.0)*2 [0,2.0)
				int random=(int)(Math.random()*2);//产生0,1随机数
				if(random==0) {
					path+="L";
				}else {
					path+="R";
					count++;
				}
			}
			caos[count]++;
			System.out.println(path);
		}
		for (int i : caos) {
			System.out.print(i+" ");
		}
		System.out.println("---------------");
		//求槽子中最多的小球数
		int max=caos[0];//槽子中最多的小球数
		for (int i = 0; i < caos.length; i++) {
			if(max<caos[i]) {
				max=caos[i];
			}
		}
		//输出
//		for (int i = max; i >=0; i--) {
//			for (int j = 0; j < caozi; j++) {
//				if(i<=caos[j]-1) {
//					System.out.print("O");
//				}else {
//					System.out.print("X");
//				}
//			}
//			System.out.println();
//		}
		
		for (int i = max; i >=0; i--) {
			for (int j = 0; j < caozi; j++) {
				if(i<caos[j]) {//caos[j]
					System.out.print("O");
				}else {
					System.out.print("X");
				}
			}
			System.out.println();
		}
		

	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值