需求:
從數(shù)組A和數(shù)組B中找出相同的數(shù)(每個(gè)數(shù)組中沒有重復(fù)數(shù))
思路:
1 借鑒查表法,把每個(gè)數(shù)組中數(shù)值映射成一個(gè)大數(shù)組的下標(biāo)值。
2 然后遍歷兩個(gè)目標(biāo)數(shù)組,對(duì)映射到的大數(shù)組中的值進(jìn)行累加。
3 最后遍歷大數(shù)組,得到數(shù)值=2的那些索引,即兩個(gè)數(shù)組中相同的數(shù)。
4 大數(shù)組的長(zhǎng)度為數(shù)組A和數(shù)組B中最大的那個(gè)數(shù)
模塊:
Demo.java |
統(tǒng)計(jì) |
public void twoArrayNumCount() |
對(duì)兩個(gè)數(shù)組進(jìn)行統(tǒng)計(jì) |
public getArrayNumCount():int [] |
返回統(tǒng)計(jì)的結(jié)果 |
private void initTableArray() |
初始化統(tǒng)計(jì)數(shù)組 |
private void arrayNumCount(array:int []) |
統(tǒng)計(jì)一個(gè)數(shù)組中的每個(gè)數(shù)字的個(gè)數(shù) |
ArrayPrint.java |
打印 |
void print(array:int []) |
打印統(tǒng)計(jì)好的數(shù)組(整個(gè)數(shù)組中數(shù)值等于2的數(shù)組索引) |
ArrayUtil.java |
數(shù)組處理 |
public static getArrayMaxNum(int [] array):int |
查找一個(gè)數(shù)組中的最大數(shù) |
public static getTwoArrayMaxNum(int [] array1,int []array2):int |
求出兩個(gè)數(shù)組中的最大數(shù) |
測(cè)試 |
TestDemo.java |
測(cè)試統(tǒng)計(jì)(Demo.java) |
TestArrayUtil.java |
測(cè)試數(shù)組處理(ArrayUtil.java) |
TestArrayPrint.java |
測(cè)試打印(ArrayPrint.java) |
主功能模塊實(shí)現(xiàn):
(一)構(gòu)造大數(shù)組
用兩個(gè)數(shù)組中的那個(gè)最大數(shù)來設(shè)定大數(shù)組的長(zhǎng)度
查找數(shù)組中的最大數(shù)
(二)統(tǒng)計(jì)
遍歷兩個(gè)數(shù)組,對(duì)大數(shù)組索引(兩個(gè)數(shù)組的值)進(jìn)行累加
代碼:
Demo.java

/** *//**
* 統(tǒng)計(jì)
*
* @author MinLi
*
*/

public class Demo
{
// 統(tǒng)計(jì)數(shù)組
private int[] tableArray;

private int[] array1;

private int[] array2;


public Demo(int[] array1, int[] array2)
{
this.array1 = array1;

this.array2 = array2;

initTableArray();
}


/** *//**
* 初始化統(tǒng)計(jì)數(shù)組(這里它的長(zhǎng)度是由兩個(gè)數(shù)組中的最大值+1)
*/

private void initTableArray()
{
int arrayMaxNum = ArrayUtil.getTwoArrayMaxNum(array1, array2);

tableArray = new int[arrayMaxNum + 1];
}


/** *//** */

/** *//**
* 統(tǒng)計(jì)一個(gè)數(shù)組中的每個(gè)數(shù)字的個(gè)數(shù)
*/

private void arrayNumCount(int[] array)
{

for (int num : array)
{
tableArray[num] += 1;
}
}


/** *//**
* 返回統(tǒng)計(jì)的結(jié)果
*
* @return
*/

public int[] getArrayNumCount()
{
return tableArray;
}


/** *//**
* 統(tǒng)計(jì)兩個(gè)數(shù)組中的每個(gè)數(shù)字的個(gè)數(shù)
*
* @param array1
* @param array2
*/

public void twoArrayNumCount()
{
arrayNumCount(array1);

arrayNumCount(array2);
}
}
ArrayUtil.java

/** *//**
* 數(shù)組處理
*
* @author MinLi
*
*/

public class ArrayUtil
{

/** *//** */

/** *//**
* 查找一個(gè)數(shù)組中的最大數(shù)
*/

public static int getArrayMaxNum(int[] array)
{
int max = array[0];


for (int num : array)
{
if (max < num)
max = num;
}
return max;
}


/** *//** */

/** *//**
* 求出兩個(gè)數(shù)組中的最大數(shù)
*/

public static int getTwoArrayMaxNum(int[] array1, int[] array2)
{
int array1Max = getArrayMaxNum(array1);

int array2Max = getArrayMaxNum(array2);

return array1Max > array2Max ? array1Max : array2Max;
}
}

ArrayPrint.java

/** *//**
* 數(shù)組打印
*
* @author MinLi
*
*/

public class ArrayPrint
{

/** *//**
* 打印整個(gè)數(shù)組中值等于2的數(shù)組索引
*
* @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

/** *//**
* 測(cè)試Demo類
*
* @author MinLi
*
*/

public class TestDemo
{

private void service()
{

test_arrayNumCount();

test_twoArrayNumCount();
}


/** *//** */

/** *//**
* 測(cè)試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);
}


/** *//** */

/** *//**
* 測(cè)試arrayNumCount方法
*/

private void test_arrayNumCount()
{

int array1[] =
{ 1, 3, 11 };

int array2[] =
{ 2, 9 };

// 這里為了測(cè)試把a(bǔ)rrayNumCount方法設(shè)為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

/** *//**
* 測(cè)試ArrayUtil類
*
* @author MinLi
*
*/

public class TestArrayUtil
{


public static void main(String[] args)
{
new TestArrayUtil().service();
}


private void service()
{
test_getTwoArrayMaxNum();

test_getArrayMaxNum();
}


/** *//** */

/** *//**
* 測(cè)試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

/** *//**
* 測(cè)試ArrayPrint類
*
* @author MinLi
*
*/

public class TestArrayPrint
{


public static void main(String[] args)
{
new TestArrayPrint().service();
}


private void service()
{
test_print();
}


/** *//** */

/** *//**
* 測(cè)試ArrayPrint類中的print方法
*/

private void test_print()
{

int array1[] =
{ 1, 1, 2 };

ArrayPrint.print(array1);
}
}
