Java中如何实现用一个数组B存储从另一个数组A中挑出的符合要求的数据并进行操作
要求:用一个数组B存储从另一个数组A中挑出的符合要求的数据,并对数组B中的数据进行操作
方法一:
1、确定数组A中符合要求的元素的个数。
(1)通常使用一个初始值为0的变量count进行数量标记,
(2)循环遍历A数组
(3)遍历的过程中,用 if 判断挑选符合条件的元素,符合条件则count++。
2、根据符合要求的元素的个数count确定数组B的长度。
3、使用循环将符合要求的数据依次存储到数组B中
(1)这里的循环是对数组A进行循环,用 if 挑选出符合条件的的值添加到数组B中。
(2)这次的循环其实和上面的一样,不同的是上面的是计数,这里是将数据添加到数组中。
4、根据要求对数组B中的数据进行操作。
案例:
给定一个char类型的数组arr1,
char[] arr1 = {'a','A','B','x','c',15,'Z','a','x','y'};
存储到数组arr2中打印输出数据,并将其中的x及其下标输出出去,若没有x则输出不存在x.
public class Demo02 { public static void main(String[] args) { //给定一个char类型的数组arr1,从中选出所有小写字母,存储到数组arr2中打印输出数据,并将其中的x及其下标输出出去,若没有x则输出不存在x char[] arr1 = {'a','A','B','x','c',15,'Z','a','x','y'}; //1、确定数组A中符合要求的元素的个数。 int count = 0; for (int i = 0; i < arr1.length; i++) { if(arr1[i] >= 'a' && arr1[i] <= 'z'){ count++; } } //2、根据符合要求的元素的个数count确定数组B的长度。 char[] arr2 = new char[count]; //3、使用循环将符合要求的数据依次存储到数组B中 int j = 0; for (int i = 0; i < arr1.length; i++) { if(arr1[i] >= 'a' && arr1[i] <= 'z'){ arr2[j++] = arr1[i]; System.out.println("数组arr2中第"+j+"个数据是:"+arr1[i]); } } if(j == 0){ System.out.println("数组arr1中不存在小写字母"); } //4、根据要求对数组B中的数据进行操作。 int s = 0; for (int i = 0; i < arr2.length; i++) { if(arr2[i] == 'x'){ System.out.println("数组arr2中存在x,它的下标为:"+ i ); s++; } } if(s == 0){ System.out.println("数组arr2中不存在x"); } } }
方法二:
1、创建一个数组B,长度(容量)为0。
2、循环遍历A数组,用 if 判断挑选符合条件的元素,定义一个函数对B进行扩容(每次扩容一个单位),将符合条件的元素存储到数组B中
(1)扩容函数可以自己定义,等于是每次创建一个长度比原来+1的新数组,然后复制元素,再进行替换
(2)JAVA中有定义好的方法,我们可以直接使用Arrays.copyOf().
3、根据要求对数组B中的数据进行操作。
案例:
给定一个char类型的数组arr1,
char[] arr1 = {'a','A','B','x','c',15,'Z','a','x','y'};
存储到数组arr2中打印输出数据,并将其中的x及其下标输出出去,若没有x则输出不存在x.
(1)自定义数组扩容方法
public class Demo02 { public static void main(String[] args) { //给定一个char类型的数组arr1,从中选出所有小写字母,存储到数组arr2中打印输出数据,并将其中的x及其下标输出出去,若没有x则输出不存在x char[] arr1 = {'a','A','B','x','c',15,'Z','a','x','y'}; //1、创建一个数组B,长度(容量)为0。 char[] arr3 = new char[0]; //2、循环遍历A数组,用 if 判断挑选符合条件的元素,定义一个函数对B进行扩容(每次扩容一个单位),将符合条件的元素存储到数组B中 //自定义扩容方法 for (int i = 0; i < arr1.length; i++) { if(arr1[i] >= 'a' && arr1[i] <= 'z'){ //扩容,arrCopy()是自定义的扩容方法 arr3 = arrCopy(arr3);
//存储数据 arr3[arr3.length-1] = arr1[i]; System.out.println("数组arr3中第"+(arr3.length-1)+"个数据是:"+arr1[i]); } } if(arr3.length == 0){ System.out.println("数组arr1中不存在小写字母"); } //3、根据要求对数组B中的数据进行操作。 int s = 0; for (int i = 0; i < arr3.length; i++) { if(arr3[i] == 'x'){ System.out.println("数组arr3中存在x,它的下标为:"+ i ); s++; } } if(s == 0){ System.out.println("数组arr2中不存在x"); } } //数组扩容 public static char[] arrCopy(char[] arr3){ char[] arr4 = new char[arr3.length+1]; //复制原来数组的元素 for (int i = 0; i < arr3.length; i++) { arr4[i] = arr3[i]; } return arr4; } }
(2)使用Java自带扩容方法
import java.util.Arrays; public class Demo02 { public static void main(String[] args) { //给定一个char类型的数组arr1,从中选出所有小写字母,存储到数组arr2中打印输出数据,并将其中的x及其下标输出出去,若没有x则输出不存在x char[] arr1 = {'a','A','B','x','c',15,'Z','a','x','y'}; //1、创建一个数组B,长度(容量)为0。 char[] arr3 = new char[0]; //2、循环遍历A数组,用 if 判断挑选符合条件的元素,定义一个函数对B进行扩容(每次扩容一个单位),将符合条件的元素存储到数组B中 for (int i = 0; i < arr1.length; i++) { if(arr1[i] >= 'a' && arr1[i] <= 'z'){ //扩容,使用自带的方法 arr3 = Arrays.copyOf(arr3,arr3.length+1); //存储数据 arr3[arr3.length-1] = arr1[i]; System.out.println("数组arr3中第"+(arr3.length-1)+"个数据是:"+arr1[i]); } } if(arr3.length == 0){ System.out.println("数组arr1中不存在小写字母"); } //3、根据要求对数组B中的数据进行操作。 int s = 0; for (int i = 0; i < arr3.length; i++) { if(arr3[i] == 'x'){ System.out.println("数组arr3中存在x,它的下标为:"+ i ); s++; } } if(s == 0){ System.out.println("数组arr2中不存在x"); } } }