需求:
从数组A和数组B中找出相同的数(每个数组中没有重复数)
思路:
1 借鉴查表法,把每个数组中数值映射成一个大数组的下标值。
2 然后遍历两个目标数组,对映射到的大数组中的值进行累加。
3 最后遍历大数组,得到数值=2的那些索引,即两个数组中相同的数。
4 大数组的长度为数组A和数组B中最大的那个数
模块:
Demo.java |
统计 |
public void twoArrayNumCount() |
对两个数组进行统计 |
public getArrayNumCount():int [] |
返回统计的结果 |
private void initTableArray() |
初始化统计数组 |
private void arrayNumCount(array:int []) |
统计一个数组中的每个数字的个数 |
ArrayPrint.java |
打印 |
void print(array:int []) |
打印统计好的数组(整个数组中数值等于2的数组索引) |
ArrayUtil.java |
数组处理 |
public static getArrayMaxNum(int [] array):int |
查找一个数组中的最大数 |
public static getTwoArrayMaxNum(int [] array1,int []array2):int |
求出两个数组中的最大数 |
测试 |
TestDemo.java |
测试统计(Demo.java) |
TestArrayUtil.java |
测试数组处理(ArrayUtil.java) |
TestArrayPrint.java |
测试打印(ArrayPrint.java) |
主功能模块实现:
(一)构造大数组
用两个数组中的那个最大数来设定大数组的长度
查找数组中的最大数
(二)统计
遍历两个数组,对大数组索引(两个数组的值)进行累加
代码:
Demo.java
/** *//**
* 统计
*
* @author MinLi
*
*/
public class Demo {
// 统计数组
private int[] tableArray;
private int[] array1;
private int[] array2;
public Demo(int[] array1, int[] array2) {
this.array1 = array1;
this.array2 = array2;
initTableArray();
}
/** *//**
* 初始化统计数组(这里它的长度是由两个数组中的最大值+1)
*/
private void initTableArray() {
int arrayMaxNum = ArrayUtil.getTwoArrayMaxNum(array1, array2);
tableArray = new int[arrayMaxNum + 1];
}
/** *//** */
/** *//**
* 统计一个数组中的每个数字的个数
*/
private void arrayNumCount(int[] array) {
for (int num : array) {
tableArray[num] += 1;
}
}
/** *//**
* 返回统计的结果
*
* @return
*/
public int[] getArrayNumCount() {
return tableArray;
}
/** *//**
* 统计两个数组中的每个数字的个数
*
* @param array1
* @param array2
*/
public void twoArrayNumCount() {
arrayNumCount(array1);
arrayNumCount(array2);
}
}
ArrayUtil.java
/** *//**
* 数组处理
*
* @author MinLi
*
*/
public class ArrayUtil {
/** *//** */
/** *//**
* 查找一个数组中的最大数
*/
public static int getArrayMaxNum(int[] array) {
int max = array[0];
for (int num : array) {
if (max < num)
max = num;
}
return max;
}
/** *//** */
/** *//**
* 求出两个数组中的最大数
*/
public static int getTwoArrayMaxNum(int[] array1, int[] array2) {
int array1Max = getArrayMaxNum(array1);
int array2Max = getArrayMaxNum(array2);
return array1Max > array2Max ? array1Max : array2Max;
}
}
ArrayPrint.java
/** *//**
* 数组打印
*
* @author MinLi
*
*/
public class ArrayPrint {
/** *//**
* 打印整个数组中值等于2的数组索引
*
* @param array
*/
public static void print(int[] array) {
int arrayLength = array.length;
for (int index = 0; index < arrayLength; index++) {
int num = array[index];
if (num == 2)
System.out.println(index);
}
}
}
TestDemo.java
/** *//**
* 测试Demo类
*
* @author MinLi
*
*/
public class TestDemo {
private void service() {
test_arrayNumCount();
test_twoArrayNumCount();
}
/** *//** */
/** *//**
* 测试twoArrayNumCount方法
*/
private void test_twoArrayNumCount() {
int array1[] = { 1, 3, 11 };
int array2[] = { 3, 9 };
Demo demo = new Demo(array1, array2);
demo.twoArrayNumCount();
int[] tableArray = demo.getArrayNumCount();
ArrayPrint.print(tableArray);
}
/** *//** */
/** *//**
* 测试arrayNumCount方法
*/
private void test_arrayNumCount() {
int array1[] = { 1, 3, 11 };
int array2[] = { 2, 9 };
// 这里为了测试把arrayNumCount方法设为public
/** *//** */
/** *//**
* Demo demo = new Demo(array1, array2);
*
* demo.arrayNumCount(array1);
*
* int[] tableArray = demo.getArrayNumCount();
*
* ArrayPrint.print(tableArray);
*/
}
public static void main(String[] args) {
new TestDemo().service();
}
}
TestArrayUtil.java
/** *//**
* 测试ArrayUtil类
*
* @author MinLi
*
*/
public class TestArrayUtil {
public static void main(String[] args) {
new TestArrayUtil().service();
}
private void service() {
test_getTwoArrayMaxNum();
test_getArrayMaxNum();
}
/** *//** */
/** *//**
* 测试ArrayUtil类中的getArrayMaxNum方法
*/
private void test_getArrayMaxNum() {
int arrays[] = { 1, 3, 6 };
System.out.println(ArrayUtil.getArrayMaxNum(arrays));
}
private void test_getTwoArrayMaxNum() {
int array1[] = { 1, 3, 11 };
int array2[] = { 2, 9 };
int maxNum = ArrayUtil.getTwoArrayMaxNum(array1, array2);
System.out.println(maxNum);
}
}
TestArrayPrint.java
/** *//**
* 测试ArrayPrint类
*
* @author MinLi
*
*/
public class TestArrayPrint {
public static void main(String[] args) {
new TestArrayPrint().service();
}
private void service() {
test_print();
}
/** *//** */
/** *//**
* 测试ArrayPrint类中的print方法
*/
private void test_print() {
int array1[] = { 1, 1, 2 };
ArrayPrint.print(array1);
}
}