需求:
從數組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);
}
}
