定义数组的语法以及相关练习题

整数数组int[]

保存100个数字

int[]arr; 声明数组

arr=new int [100];//创建数组(分配内存空间)

定义数组的语法:数组类型[] 数组名称=new 数组类型[长度]

定义数组

例如:

// 数组的定义
import java.util.Arrays;
public class demo02 {

	public static void main(String[] args) {
		//整数数组int[]
		int n1=7,n2=43,n3=6;
		System.out.println(n1);
		
		//整数数组int[]
		//保存100个数字
		//int[]arr; 声明数组
		//arr=new int [100];//创建数组(分配内存空间)
		
		//定义数组的语法
		//数组类型[] 数组名称=new 数组类型[长度]
		int[] arr01=new int [100];//默认值0
		double[] arr02=new double[6];//默认值0.0
		boolean[] arr03=new boolean[10];//默认值false
		
		//打印方式1:
		//直接打印数组:数组类型@内存地址
		System.out.println(arr01);
		System.out.println(arr02);
		System.out.println(arr03);
		
		//打印方式2:
		//通过Arrays工具类的toString()方法查看数组中的所有值
       System.out.println(Arrays.toString(arr01));
       System.out.println(Arrays.toString(arr02));
       System.out.println(Arrays.toString(arr03));
		

	}

}

运行结果:

[D@6504e3b2
[Z@515f550a
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[false, false, false, false, false, false, false, false, false, false]

打印数组长度

String[] nameArray=new String[5];
//打印数组长度
System.out.println("数组长度"+nameArray.length);

访问数组中的元素

//访问数组中的元素
//语法格式:数组名[下标]
//下标:从0开始,尾下标等于数组长度-1
nameArray[0]="周杰伦";
nameArray[1]="陈奕迅";
nameArray[nameArray.length-1]="张杰";

打印数组内容

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

运行结果:

数组长度5
[周杰伦, 陈奕迅, null, null, 张杰]

数组初始化(内存空间+数据)

public class demo04 {

	public static void main(String[] args) {
		// 数组初始化(内存空间+数据)
//		String[] names=new String[10];
//		names[0]="";
		  
		String[] names= {"周杰伦","张杰","李贤","白鹿","薛之谦"};
		System.out.println("数组的长度:"+names.length);
		System.out.println("数组的首元素:"+names[0]);
		System.out.println("数组的尾元素:"+names[names.length-1]);

	}

}

运行结果:

数组的长度:5
数组的首元素:周杰伦
数组的尾元素:薛之谦
import java.util.Arrays;

public class demo05 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int[] numbers2=new int[20];//默认值0
		System.out.println("默认值:"+Arrays.toString(numbers2));
		
		//方式1:
		for(int i=0;i<numbers2.length;i++) {
			numbers2[i]=-1;
		}
		System.out.println("设置-1:"+Arrays.toString(numbers2));
		
		//方式2:
		Arrays.fill(numbers2, -2);
		System.out.println("设置-2:"+Arrays.toString(numbers2));
	}

}

运行结果:

默认值:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
设置-1:[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
设置-2:[-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2]

使用数组,依次按照顺序保存1-20之间的数字 

产生一个随机下标,并将该位置的数据设置为0

import java.util.Arrays;

public class demo06 {

	public static void main(String[] args) {
		// 使用数组,依次按照顺序保存1-20之间的数字
		int[] numbers=new int[20];
		
		for(int i=0,n=1;i<numbers.length;i++,n++) {
			numbers[i]=n;
		}
		System.out.println("初始化1-20"+Arrays.toString(numbers));
		
		//产生一个随机下标,并将该位置的数据设置为0
		int randIndex=(int)(Math.random()*numbers.length);
		numbers[randIndex]=0;//指定下标位置的数据设置为0
		
		System.out.println("随即抹去数据"+Arrays.toString(numbers));
	
	}

}

运行结果:

初始化1-20[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
随即抹去数据[1, 2, 3, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

对比两个数组数据 求出缺的数字

public class demo07 {

	public static void main(String[] args) {
		// 对比两个数组数据 求出缺的数字
		//一组整数 缺一个数字
		int[] numbers= {1, 2, 3, 4, 5, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
		//一组整数 连续完整
		int[] target= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
		
		int sum=0;
		int total=0;
		
		for(int i=0;i<numbers.length;i++) {
			sum=sum+numbers[i];
			total=total+target[i];
		}
		System.out.println(total-sum);
}
}

运行结果:

6

只有1个数字仅出现1次,期许数字均出现2次(偶数次)

public class demo08 {

	public static void main(String[] args) {
		// 只有1个数字仅出现1次,期许数字均出现2次(偶数次)
		int[] numbers= {1,2,3,4,5,3,5,4,2};
		
		int ret=0;//1^2^3^4^5^3^5^4^2
		for(int i=0;i<numbers.length;i++) {
			ret=ret^numbers[i];
		}
		System.out.println(ret);
}
}

运行结果:

1
public class demo09 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] foods= {"汉堡","波罗蜜","肉夹馍","披萨"};
		String[] drinks= {"可乐","雪碧","水","果汁"};
		
		//外层:遍历foods数组
		int counter=1;
		for(int i=0;i<foods.length;i++) {
			//内层:drinks数组
			for(int k=0;k<drinks.length;k++) {
				if(counter<10) {
					System.out.printf("套餐0%d:%s,%s\n",counter++,foods[i],drinks[k]);
				}else {
					System.out.printf("套餐%d:%s,%s\n",counter++,foods[i],drinks[k]);
				}
//				System.out.println("主食:"+foods[i]);
//				System.out.println("饮料:"+drinks[k]);
//				System.out.println("套餐:"+foods[i]+","+drinks[k]);
//				System.out.printf("套餐%d:%s,%s\n",counter++,foods[i],drinks[k]);
			}
		}
		

	}

运行结果:

套餐01:汉堡,可乐
套餐02:汉堡,雪碧
套餐03:汉堡,水
套餐04:汉堡,果汁
套餐05:波罗蜜,可乐
套餐06:波罗蜜,雪碧
套餐07:波罗蜜,水
套餐08:波罗蜜,果汁
套餐09:肉夹馍,可乐
套餐10:肉夹馍,雪碧
套餐11:肉夹馍,水
套餐12:肉夹馍,果汁
套餐13:披萨,可乐
套餐14:披萨,雪碧
套餐15:披萨,水
套餐16:披萨,果汁

计算日期是当年的第几天

import java.time.LocalDate;
import java.util.Arrays;

public class demo10 {

	public static void main(String[] args) {
		// 计算日期是当年的第几天
		String dateStr="2023-08-05";
		
		//分别截取年份、月份、日期
		//并转换成整数类型
		int year=Integer.parseInt(dateStr.substring(0,4));
		int month=Integer.parseInt(dateStr.substring(5,7));
		int days=Integer.parseInt(dateStr.substring(8));
		
		//方式1:
		System.out.println(LocalDate.of(year, month,days).getDayOfYear());
		
		//方式2:
		//定义数组:保存1月到12月的天数
		int[] arr= {31,28,31,30,31,30,31,31,30,31,30,31};
		if(year % 4==0 && year % 100!=0 || year % 400 ==0) {
			arr[1]++;
		}
		//累计当前月份之前的所有月份总天数
		int dayOfYear=0;
		for(int i=0;i<=month-2;i++) {
			dayOfYear += arr[i];
		}
		//累计当前月份的天数
		dayOfYear += days;
		System.out.println(dayOfYear);
	}

}

运行结果:

217
217

通过键盘输入N数字,并保存至数组 

Scanner对象input用于获取键盘输入

将Scanner对象定义在try块中,可以自动关闭

import java.util.Arrays;
import java.util.Scanner;

public class demo11 {

	public static void main(String[] args) {
		// 通过键盘输入N数字,并保存至数组
		// Scanner对象input用于获取键盘输入
		// 将Scanner对象定义在try块中,可以自动关闭
		try(Scanner input=new Scanner(System.in)){
			System.out.println("请输入数组长度");
			int n=input.nextInt();
			
			//创建数组
			int[] numbers=new int[n];
			//循环输入N个数字,并保存至数组numbers
			for(int i=0;i<n;i++) {
				numbers[i]=input.nextInt();
				System.out.println(Arrays.toString(numbers));
			}
			
		}

	}

}

运行结果:

请输入数组长度
6
1
[1, 0, 0, 0, 0, 0]
2
[1, 2, 0, 0, 0, 0]
3
[1, 2, 3, 0, 0, 0]
4
[1, 2, 3, 4, 0, 0]
5
[1, 2, 3, 4, 5, 0]
6
[1, 2, 3, 4, 5, 6]

键盘输入7个数字1-33之间不重复的数字 

import java.util.Arrays;
import java.util.Scanner;

public class demo12 {

	public static void main(String[] args) {
		// 键盘输入7个数字1-33之间不重复的数字
		try(Scanner input=new Scanner(System.in)){
			
			//定义数组,保存7个数字
			int[] numbers=new int[7];
			
			outer:
			for(int i=0;i<numbers.length;i++) {
				System.out.printf("请输入第%d个数字:",i+1);
				int temp=input.nextInt();
				
				//检查1-33
				if(temp <1 || temp >33) {
					System.err.println("请输入1-33之间的数字!");
					i--;
					continue;//结束本次(外循环),进入下一次循环
				}
				
				//检查是否存在重复数字
				for(int k=0;k<i;k++) {
					if(numbers[k] == temp) {
						//存在重复数字
						System.err.println("请不要输入重复数字!");
						i--;
						
						//在内层循环中,结束外层循环outer
						continue outer; 
					}
				}
				//保存
				numbers[i]=temp;
				System.out.println(Arrays.toString(numbers));
			}
		}

	}

}

运行结果:

请输入第1个数字:1
[1, 0, 0, 0, 0, 0, 0]
请输入第2个数字:5
[1, 5, 0, 0, 0, 0, 0]
请输入第3个数字:6
[1, 5, 6, 0, 0, 0, 0]
请输入第4个数字:23
[1, 5, 6, 23, 0, 0, 0]
请输入第5个数字:32
[1, 5, 6, 23, 32, 0, 0]
请输入第6个数字:34
请输入1-33之间的数字!
请输入第6个数字:22
[1, 5, 6, 23, 32, 22, 0]
请输入第7个数字:21
[1, 5, 6, 23, 32, 22, 21]

产生1-33之间不重复的7个随机数 

import java.util.Arrays;

public class demo13 {
	public static void main(String[] args) {
		//产生1-33之间不重复的7个随机数
		
		int[] sysNumbers=new int[7];
		outer:
		for(int i=0;i<sysNumbers.length;i++) {
			//产生1-33之间不重复的7个随机数
			int temp=(int)(Math.random()*33+1);
			
			//检查随机数是否重复
			for(int k=0;k<i;k++) {
				if(sysNumbers[k]==temp) {
					i--;
					continue outer;
					
				}
			}
			
			sysNumbers[i]=temp;
		}
		System.out.println(Arrays.toString(sysNumbers));
	}
}

运行结果:

[12, 26, 28, 16, 14, 21, 8]

检查两个数组,相同数字的个数 


	public static void main(String[] args) {
		//检查两个数组,相同数字的个数
		int[] sysNumbers= {31, 19, 14, 26, 9, 2, 30};
		int[] userNumbers= {1, 19, 12, 6, 9, 2, 30};
		
		int counter=0;
		for(int i=0;i<sysNumbers.length;i++) {
			for(int k=0;k<userNumbers.length;k++) {
				if(sysNumbers[i]==userNumbers[k]) {
				counter++;
				break;//终止内层循环
				}
			}
		}
		System.out.println(counter);
	}

}

运行结果:

4

33选择7 练习题

import java.util.Arrays;
import java.util.Scanner;

public class demo15 {

	public static void main(String[] args) {
		// 33选择7

		// int[] userNumbers = new int[7];// 用户输入7个数字
		// int[] sysNumbers = new int[7];// 随机产生7个数字

		// 步骤1:用户输入7个1-33之间不重复的数字
		try (Scanner input = new Scanner(System.in)) {
			int[] userNumbers = new int[7];

			outer: for (int i = 0; i < userNumbers.length; i++) {
				System.out.printf("请输入第%d个数字", i + 1);
				int temp = input.nextInt();

				// 检查是否在1-33中间
				if (temp < 1 || temp > 33) {
					System.err.println("请输入1-33之间的数字!");
					i--;
					continue;
				}

				// 检查是否存在重复数字
				for (int k = 0; k < i; k++) {
					if (userNumbers[k] == temp) {
						System.err.println("请不要输入重复的数字!");
						i--;
						continue outer;
					}
				}
				userNumbers[i] = temp;
				System.out.println(Arrays.toString(userNumbers));
			}
			System.out.println("你最终输入的数字为:"+Arrays.toString(userNumbers));

			// 步骤2:系统随机产生7个1-33之间的不重复随机数
			int[] sysNumbers = new int[7];
			outer1: for (int i = 0; i < sysNumbers.length; i++) {
				// 产生随机数
				int temp = (int) (Math.random() * 33 + 1);

				// 检查随机数是否相等
				for (int k = 0; k < i; k++) {
					if (sysNumbers[k] == temp) {
						i--;
						continue outer1;
					}
				}
				sysNumbers[i] = temp;
			}
			System.out.println("系统产生的数字为:"+Arrays.toString(sysNumbers));

			// 步骤3:比较两个数组中相同数字的个数
			int counter = 0;
			for (int i = 0; i < userNumbers.length; i++) {
				for (int k = 0; k < sysNumbers.length; k++) {
					if (userNumbers[i] == sysNumbers[k]) {
						counter++;
						break;
					}
				}
			}
			System.out.println("相同的数字为:"+counter+"个");
			
			// 特等奖: 7个相同数字
			// 一等奖: 6个相同数字
			// 二等奖: 5个相同数字
			// 三等奖: 4个相同数字
			if(counter==7) {
				System.out.println("您获得了特等奖");
			}else if(counter==6) {
				System.out.println("您获得了一等奖");
			}else if(counter==5) {
				System.out.println("您获得了二等奖");
			}else if(counter==4) {
				System.out.println("您获得了三等奖");
			}else {
				System.out.println("请您明天再来!");
			}

		}
	}
}

运行结果:

请输入第1个数字9
[9, 0, 0, 0, 0, 0, 0]
请输入第2个数字9
请不要输入重复的数字!
请输入第2个数字8
[9, 8, 0, 0, 0, 0, 0]
请输入第3个数字14
[9, 8, 14, 0, 0, 0, 0]
请输入第4个数字35
请输入1-33之间的数字!
请输入第4个数字34
请输入1-33之间的数字!
请输入第4个数字20
[9, 8, 14, 20, 0, 0, 0]
请输入第5个数字25
[9, 8, 14, 20, 25, 0, 0]
请输入第6个数字30
[9, 8, 14, 20, 25, 30, 0]
请输入第7个数字19
[9, 8, 14, 20, 25, 30, 19]
你最终输入的数字为:[9, 8, 14, 20, 25, 30, 19]
系统产生的数字为:[4, 3, 33, 16, 29, 20, 10]
相同的数字为:1个
请您明天再来!

两数之和:在数组numbers中,两个元素之和等于目标值target

//0+5=5

//1+4=5

//2+3=5

public class demo16 {

	public static void main(String[] args) {
		// 两数之和:在数组numbers中,两个元素之和等于目标值target
		//0+5=5
		//1+4=5
		//2+3=5
		int[] numbers= {0,1,2,3,4,5,6};
		int target=5;
		outer:
		for(int i=0;i<numbers.length;i++) {
			for(int k=i+1;k<numbers.length;k++) {
				int temp=numbers[i]+numbers[k];
				if(temp==target) {
					System.out.println(numbers[i]+"+"+numbers[k]+"="+temp);
					System.out.printf("这两个数的下标分别是:%d,%d\n",i,k);
					break outer;
				}
			}
		}
		
	}
}

运行结果:

0+5=5
这两个数的下标分别是:0,5

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值