整数数组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