需求:
从数组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);
}
}
