使用for循环来进行数组遍历
例题1:给一组数组,使用不同方式对数组遍历
解:方式1:通过下标:实现数组的顺序和逆序遍历
方式2:foreach 只能顺序遍历,不能修改数组值
import java.util.Arrays;
//数组的遍历
public class Test {
public static void main(String[] args) {
int[] numbers = {1,2,3,4,5,6,7};
//顺序
for(int i = 0;i < numbers.length;i++) {
System.out.print(numbers[i]+"\t");
numbers[i] = numbers[i] * 10;
}
System.out.println();
//逆序
for(int i = numbers.length-1;i >= 0;i--) {
System.out.print(numbers[i]+"\t");
}
System.out.println();
for(int n :numbers) {
n = n*10;
System.out.print(n+"\t");
}
System.out.println(Arrays.toString(numbers));
}
}
运行结果:
1 2 3 4 5 6 7
70 60 50 40 30 20 10
100 200 300 400 500 600 700
[10, 20, 30, 40, 50, 60, 70]
例题2:使用数组依次按照顺序保存1-15之间的数字,产生一个随机下标,并将该位置的数据设置为0
解:使用for循环遍历字符串,int i(下标),n(开始的第一个值);i要小于数组的长度,i和n都是递增的。使用Math.random()产生随机数,指定下标位置的数据设置为0
import java.util.Arrays;
public class Test06 {
public static void main(String[] args) {
//使用数组,依次按照顺序保存1-15之间的数字
int [] numbers = new int [15];
for(int i =0,n=1;i<numbers.length;i++,n++) {
numbers[i] = n;
}
System.out.println("初始化数据集:"+Arrays.toString(numbers));
//产生一个随机下标,并将该位置的数据设置为0
int randIndex = (int) (Math.random() * numbers.length);
numbers[randIndex] = 0;//指定下标位置的数据设置为0
System.out.println("随机抹去数据:"+Arrays.toString(numbers));
}
}
运行结果
初始化数据集:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
随机抹去数据:[1, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
例题3:使用数组遍历,在一组连续不完整和一组连续完整的整数中找到缺失值
解:首先定义sum和total都为0,遍历数组;分别把不完整和完整的整数存入sum和total中,输出为total-sum
public class Test {
public static void main(String[] args) {
//一组整数:连续不完整
int [] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 12, 13, 14, 15};
//一组整数:连续完整
int [] target = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
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);
}
}
运行结果:11
例题4:使用数组遍历,输出可搭配套餐
解:本题要解决的是把foods数组和drinks数组组合套餐问题,在遍历字符串外部定义counter(为次数),遍历两次数组,都从下标0开始,范围小于长度,i++
public class Test {
public static void main(String[] args) {
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]);
}
}
}
}
}
运行结果
套餐01:汉堡,可乐
套餐02:汉堡,雪碧
套餐03:汉堡,果汁
套餐04:汉堡,冰峰
套餐05:菠萝派,可乐
套餐06:菠萝派,雪碧
套餐07:菠萝派,果汁
套餐08:菠萝派,冰峰
套餐09:肉夹馍,可乐
套餐10:肉夹馍,雪碧
套餐11:肉夹馍,果汁
套餐12:肉夹馍,冰峰
套餐13:披萨,可乐
套餐14:披萨,雪碧
套餐15:披萨,果汁
套餐16:披萨,冰峰
例题4:使用数组遍历,计算日期是当年的第几天
解:分别截取年 月 日 转成整数类型。方法1直接使用LocalDate.of()方法;方法2使用数组遍历
import java.time.LocalDate;
import java.util.Arrays;
public class Test10 {
public static void main(String[] args) {
//计算日期是当年的第几天
String dateStr = "2024-01-22";
//分别截取年 月 日
//转成整数类型
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:
int[] arr = {31,28,31,30,31,30,31,31,30,31,30,31};
if(year % 4 ==0 && year % 100 !=0 ||year % 100 ==0) {
arr[1]++;
}
//累计当前月份之前的所有月份总天数
int DayOfYear =0;
for(int i = 0;i <= month -2;i++) {
DayOfYear = DayOfYear + arr[i];
}
//累加当前月份的天数
DayOfYear = DayOfYear + days;
System.out.println(DayOfYear);
}
}
运行结果
22
22