二维数组

1.加强Foreach循环:
语法:for(数据类型 当前遍历元素的一个指代:数组名){
循环体
}
注意:Foreach循环只能用来循环访问数组或者集合中的元素。不能对数组中的元素进行修改,增加,删除。
Foreach循环只能用来访问数组中的元素。for循环可以对数组中的元素作任意操作。
案例:

public class ForeachTest{

	public static void main(String[] args) {
		int[] nums={1,5,8,7,6,3};
		
		for(int i=0;i<nums.length;i++){
			System.out.print(nums[i]+"\t");
		}
		System.out.println();
		for (int n: nums) {
			System.out.print(n+"\t");
		}
	}
}

2.二维数组:数据类型相同的一个数组,数组中的每一个元素是一个一维数组。
(1)二维数组的声明:
a.数据类型[][] 数组名;
b.数据类型[][] 数组名=new 数据类型[长度][长度(可选)];

(2)二维数组的空间分配:
	a.数组名=new 数据类型[长度1][长度2];
	b.数组名=new 数据类型[长度1][];
		数组名[下标]=new 数据类型[长度2];

(3)二维数组的赋值
	a.静态赋值:int[][] nums=new int[][]{{5,3,5},{7,8}};
		int[][] nums={{5,3,5},{7,8}};

	b.动态赋值:
			//声明2个长度的二维数组,数组中每个元素是一个一维数组,一维数组的长度没写
			int[][] nums=new int[2][];
			//给二维数组中的第一个空间中的一维数组分配空间
			nums[0]=new int[2];
			//给二维数组中的第一个空间中的一维数组中的第一个空间动态赋值
			nums[0][0]=5;

(4)访问二维数组
	String[][] nickNames={{"熊二","ceo"},{"灰太狼","熊大","光头强"},{"海王","张三"}};
	//访问二维数组,外层循环控制二维数组的每个空间,里层控制二维数组中每个空间的一维数组的空间
	for(int i=0;i<=nickNames.length-1;i++){
		for(int j=0;j<=nickNames[i].length-1;j++){
			System.out.print(nickNames[i][j]+"\t");
		}
		System.out.println();
	}

	//访问二维数组,n1指代的是二维数组中遍历的当前空间的值(第实际上是一个一维数组),n2指代的是一维数组中遍历的当前空间的值(第实际上是一个值)
	for (String[] n1 : nickNames) {
		for (String n2 : n1) {
			System.out.print(n2+"\t");
		}
		System.out.println();
	}

============================================================================
public class Arrays1Test {

/**
 * @param args
 */
public static void main(String[] args) { 
	//声明一个二维数组,并给它分配空间
	String[][] names;
	names=new String[2][];
	
	//声明一个二维数组同时给它分配空间
	int[][] ages=new int[5][];
	
	//在声明数组的同时,给它分配空间并静态赋值
	String[][] nickNames={{"熊二","ceo"},{"灰太狼","熊大","光头强"},{"海王","张三"}};
	
	//给二维数组动态赋值
	names[0]=new String[2];
	names[0][0]="张三1";
	names[0][1]="张三2";
	
	names[1]=new String[3];
	names[1][0]="李四1";
	names[1][1]="李四2";
	names[1][2]="李四3";
	
	//访问二维数组,外层循环控制二维数组的每个空间,里层控制二维数组中每个空间的一维数组的空间
	for(int i=0;i<=nickNames.length-1;i++){
		for(int j=0;j<=nickNames[i].length-1;j++){
			System.out.print(nickNames[i][j]+"\t");
		}
		System.out.println();
	}
	
	System.out.println("=======================================");
	
	//访问二维数组,n1指代的是二维数组中遍历的当前空间的值(第实际上是一个一维数组),n2指代的是一维数组中遍历的当前空间的值(第实际上是一个值)
	for (String[] n1 : nickNames) {
		for (String n2 : n1) {
			System.out.print(n2+"\t");
		}
		System.out.println();
	}
}

}

用二维数组输出杨辉三角
public class YangHui {
public static void main(String[] args) {
//整个杨辉三角用二维数组
int[][] nums=new int[10][];
//杨辉三角第一行
nums[0]=new int[1];
nums[0][0]=1;

	//杨辉三角第二行
	nums[1]=new int[2];
	nums[1][0]=1;
	nums[1][1]=1;
	
	//外层循环控制杨辉三角的行号,也即是二维数据的每个空间,前面两行的值是固定,我们从第三行开始
	for(int i=2;i<=nums.length-1;i++){
		//内层循环控制杨辉三角的每一行的数字,也即是二维数据的每个空间的一维数组中的值
		nums[i]=new int[i+1];
		for(int j=0;j<=nums[i].length-1;j++){
			if(j==0||j==nums[i].length-1){
				nums[i][j]=1;
			}else{
				nums[i][j]=nums[i-1][j]+nums[i-1][j-1];
			}
		}
	}
	
	System.out.println("输出10行杨辉三角:");
	for(int i=0;i<=nums.length-1;i++){
		for(int j=0;j<=nums[i].length-1;j++){
			System.out.print(nums[i][j]+"\t");
		}
		System.out.println();
	}
}

}

作业讲解

  1.   素数也叫质数.是除了1和其本身,不能被其他正整数整除的正整数.
    

a) 例如:2,3,5,7,11,13,17,19,23…
a) 写一个方法判断该数是否为素数(设计成一个方法 boolean)
b) 输出某个范围内的所有素数,比如100-200之间。

第一问:
public class Shu1 {

public static void main(String[] args) {
	Scanner input=new Scanner(System.in);
	
	System.out.println("请输入一个正整数:");
	int num=input.nextInt();
	
	if(num>1){
		boolean result= isSuShu(num);
		if (result==true) {
			System.out.println(num+"是质数");
		} else {
			System.out.println(num+"不是质数");
		}
					
	}else if(num==1){
		System.out.println(num+"不是质数");
	}else{
		System.out.println("输入有误!");
	}
}	
/**
 * 判断一个数是否是质数
 * @param a 要判断的数
 * @return boolean true表示是质数,false表示不是质数
 */
public static boolean isSuShu(int a) {//a=5
	boolean flag=true;//标记是质数
	for(int i=2;i<a;i++){
		if(a%i==0){
			flag=false;
			break;
		}
	}		
	return flag;
}

第二问:

public class Shu2 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		
		System.out.println("请输入一个范围的最小值:");
		int num1=input.nextInt();
		System.out.println("请输入一个范围的最大值:");
		int num2=input.nextInt();
		int count=0;//作标记,专门用来计数有多少个质数
		if(num1<=num2&&num1>0){
			System.out.println(num1+"到"+num2+"范围内,所有的质数为:");
			for(int i=num1;i<=num2;i++){
				if(i!=1){//先把1排除
					//调用方法判断当前数是否是质数
					boolean result=isSuShu(i);
					if(result==true){//当前的数就是质数
						System.out.print(i+"\t");
						count++;
					}
				}
			}
			
			System.out.println("\n共有"+count+"个质数");
		}else{
			System.out.println("输入不误!");
		}
	}
	
	/**
	 * 判断一个数是否是质数
	 * @param a 要判断的数
	 * @return boolean true表示是质数,false表示不是质数
	 */
	public static boolean isSuShu(int a) {//a=5
		boolean flag=true;//标记是质数
		for(int i=2;i<a;i++){
			if(a%i==0){
				flag=false;
				break;
			}
		}	
		return flag;
	}
}
  1.   闰年,能被4整除而且不能被100整除,或者能被400整除就是闰年
    

a) 判断某个年份是否为闰年(设计成一个方法 boolean)
b) 输出一个范围内的哪些年份是闰年(从2000至2020年)
第一问:
public class Zy5 {

/**
 * @param args
 */
public static void main(String[] args) {
	Scanner input=new Scanner(System.in);
	
	System.out.println("请输入一个年份:");
	int num=input.nextInt();
	boolean result=isYear(num);
	if(result==true){
		System.out.println(num+"是闰年");
	}else{
		System.out.println(num+"不是闰年");
	}
}

/**
 * 判断一个年份是否是闰年
 * @param year 年份
 * @return boolean
 */
public static boolean isYear(int year) {
	if((year%4==0&&year%100!=0)||year%400==0){
		return true;
	}else{
		return false;
	}
}

}

第二问

public class Zy52 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		
		System.out.println("请输入一个范围的最小年份:");
		int num1=input.nextInt();
		System.out.println("请输入一个范围的最大年份:");
		int num2=input.nextInt();
		
		if(num1<=num2&&num1>0){
			System.out.println(num1+"到"+num2+"范围内是闰年的是:");
			for (int i = num1; i <=num2; i++) {
				boolean result=isYear(i);
				if(result==true){
					System.out.print(i+"\t");
				}
			}
		}else{
			System.out.println("输入有误");
		}
		
	}
	
	/**
	 * 判断一个年份是否是闰年
	 * @param year 年份
	 * @return boolean
	 */
	public static boolean isYear(int year) {
		if((year%4==0&&year%100!=0)||year%400==0){
			return true;
		}else{
			return false;
		}
	}
}

============================================================================
(1)挑战级:优化抽奖程序,要求对里面存储的学员姓名信息进行管理,可以对数据进行增加,删除,和查询的功能(可选)
功能展示如下:
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
1
请输入学员姓名:
zhangsan
添加成功!
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
1
请输入学员姓名:
zhangsan
该学员姓名已经存在,是否继续录入?(y/n)
y
请输入学员姓名:
lisi
添加成功!
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
3
查询学员信息–>>
zhangsan
lisi
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
2
请输入学员姓名:
wangwu
该学员不存在,是否继续录入?(y/n)
y
请输入学员姓名:
lisi
删除成功!
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
3
查询学员信息–>>
zhangsan
幸运抽奖程序
1.添加学员信息
2.删除学员信息
3.查询学员信息
4.退出
请输入您的选择:
4
谢谢使用!

public class Student {
	public static void main(String[] args) {
		String[] students=new String[100];
		menu(students);
	}

	/**
	 * 抽奖系统主菜单
	 */
	public static void menu(String[] students) {
		Scanner input = new Scanner(System.in);
		System.out.println("幸运抽奖程序");
		System.out.println("1.添加学员信息");
	System.out.println("2.删除学员信息");
	System.out.println("3.查询学员信息");
	System.out.println("4.退出");
	System.out.println("请输入您的选择:");
	int choice = input.nextInt();
	switch (choice) {
		case 1:
			//添加学员信息
			addStu(students);
			//操作完后,进入主菜单
			menu(students);
			break;
		case 2:
			//删除学员信息
			delStu(students);
			//操作完后,进入主菜单
			menu(students);
			break;
		case 3:
			//查询学员信息
			seachStu(students);
			//操作完后,进入主菜单
			menu(students);
			break;
		case 4:
			System.out.println("谢谢使用!");
			System.exit(0);//正常退出系统,jvm关闭
			break;
		default:
			System.out.println("输入有误!");
			menu(students);
			break;
	}

}

/**
 * 添加学员信息
 * @param students 学生姓名数组
 */
public static void addStu(String[] students) {
	Scanner input = new Scanner(System.in);
	System.out.println("请输入学生姓名:");
	String stuName=input.next();
	//判断数组中是否有与当前输入的姓名重名
	boolean flag=false;//标记是否重名,false表示不重名
	for (int i = 0; i < students.length; i++) {
		if(students[i]!=null&&students[i].equals(stuName)){
			flag=true;
			break;
		}
	}
	
	if(flag==true){//输入的姓名重名
		System.out.println("该学员姓名已经存在,是否继续录入?(y/n)");
		String choice2=input.next();
		if (choice2.equals("y")) {//输入y重复添加学生这个操作,调用自身的方法
			addStu(students);
		} 
	}else{//不重名,就可以将学生添加到数组中
		for (int i = 0; i < students.length; i++) {
			if(students[i]==null){
				students[i]=stuName;
				System.out.println("添加成功");
				break;
			}
		}
	}
}


/**
 * 查询学员信息
 * @param students
 */
public static void seachStu(String[] students) {
	System.out.println("查询学员信息-->>");
	for (int i = 0; i < students.length; i++) {
		if(students[i]!=null){
			System.out.println(students[i]);
		}
	}
}

/**
 * 删除学生信息
 * @param students
 */
public static void delStu(String[] students) {
	Scanner input = new Scanner(System.in);
	System.out.println("请输入学生姓名:");
	String stuName=input.next();
	boolean flag=false;//标记此学生在数组中是否存在,false表示不存在 
	int index=0;//要删除学生在数组中的下标
	//判断要删除的学生姓名是否在数组中存在
	for (int i = 0; i < students.length; i++) {
		if (students[i]!=null&&students[i].equals(stuName)) {
			flag=true;
			index=i;
			break;
		}
		}
		
		if (flag==true) {//删除学生姓名,并将它后面的值依次往前面移
			students[index]=null;//删除学生
			//并将它后面的值依次往前面移
//			for (int i = index; i < students.length-1; i++) {
//				if(students[i+1]!=null){
//					students[i]=students[i+1];
//				}
//			}
			System.out.println("删除成功!");
		} else {//删除的学生姓名在数组中不存在
			System.out.println("该学员不存在,是否继续录入?(y/n)");
			String choice3=input.next();
			if (choice3.equals("y")) {//重新执行删除操作
				delStu(students);
			}
		}	
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值