Java数据结构与算法之数组(二)

本文介绍了一个Java程序示例,展示了如何实现基本的数组操作,包括插入、查找、删除元素及获取最大值等,并实现了简单的排序功能和去重操作。
import java.util.Scanner;

//如下数组未考虑值重复
class HighArrayClass
{
    /*  
    定义一个私有成员变量
    该变量类型为int 类型 
    */
    private int[] array;

    /* 
    定义一个数据记录指针
    用于记录该数组中的元素个数
    起名数组记录指针
     */
    private int index;

    //定义一个无参构造方法
    public HighArrayClass(){}

    /* 
    定义一个有参构造方法
    用于初始化数组的长度
    同时初始化数组记录指针为0
    */
    public HighArrayClass(int maxSize)
    {
        array = new int[maxSize];
        index = 0;
    }

    /*
    定义一个插入元素方法
    用于插入元素到数组中
    由于是无序数组
    故只需在最后添加一个数据即可
    */
    public void insertElemets(int value)
    {
        array[index] = value;
        index++;
    }

    /*
    定义一个显示数组的方法
    用于将数组中的元素显示出来
    */
    public void displayElements()
    {
        for(int i = 0;i<index;i++)
        {
            System.out.print(""+array[i]+'\t');
        }
        System.out.println();
    }

    /*
    定义一个查找元素的方法
    用于查找数组中某个元素的位置
    */
    public void findElements(int value)
    {
        int posTemp;
        for(posTemp = 0;posTemp<index;posTemp++)
            if(array[posTemp] == value)
                break;

        if(posTemp == index)
        {
            System.out.println("我不能找到你想要的"+value);
        }
        else
        {
            System.out.println("你想要的数"+value);
            System.out.println("它在数组第"+(posTemp+1)+"个位置上!");
        }
    }

    /*
    定义一个删除数组元素的方法
    用于删除数组中的某个元素
    */
    public void deleteElements(int value)
    {
        int posTemp;
        for(posTemp = 0;posTemp<index;posTemp++)
            if(array[posTemp] == value)
                break;

        if(posTemp == index)
        {
            System.out.println("你想要的数"+value);
            System.out.println("它不在数组中,故无法删除该数据!");
        }
        else
        {
            for(int k=posTemp;k<index-1;k++)
            {
                array[k]=array[k+1];
            }
            index--;

            System.out.println("已经删除了该数据");
        }
    }

    /*
    定义一个获取最大值的方法
    用于获取该数组中最大的值
    */
    public int getMax()
    {
        if(index == 0)
        {
            return -1;
        }

        int max = 0;
        for(int i = 1;i<index;i++)
        {
            if(array[max]<array[i])
                //array[max]=array[i];
                /*
                上述的错误是将最大值放到第一个位置上了。
                直接更改角标对应的元素值。
                */
                max = i;
        }

        return array[max];
    }

    /*
    定义一个删除最大值的方法
    用于删除该数组中最大的值
    */
    public void removeMax()
    {
        int valueMax = getMax();

        //System.out.println("[removeMax]现在该数组的最大值是:"+valueMax);
        //System.out.println("[removeMax]现在数组的长度是:"+index);
        //System.out.println("[removeMax]现在数组中的元素如下:");
        //displayElements();

        int posTemp;

        for(posTemp = 0;posTemp<index;posTemp++)
        {
            //System.out.println("[removeMax]array["+posTemp+"]="+array[posTemp]);

            if(array[posTemp] == valueMax)
            {
                //System.out.println("[removeMax]获取到最大值的位置了!");
                break;
            }
            //System.out.println("[removeMax]正在找寻最大值的位置。。。。");
        }

        //System.out.println("[removeMax]最大值的位置是:"+(posTemp+1));

        for(int k=posTemp;k<index-1;k++)
        {
            array[k]=array[k+1];
        }
        index--;
    }

    /*
    定义一个删除重复数据的方法
    用于删除该数据中重复的数据
    */
    public boolean noDup()
    {
        int countSame = 0;
        boolean dupFlag = false;

        for(int i = 0;i<index-1;i++)
        {
            if(array[i] == -1)
                continue;

            for(int j = i+1;j<index;j++)
            {
                if(array[i]==array[j])
                {
                    array[j]=-1;
                    countSame++;
                    dupFlag = true;
                }
            }
        }

        //System.out.println("[noDup]经过处理后的数据如下:");
        //displayElements();
        //System.out.println("[noDup]-1的个数为"+countSame);

        while( countSame != 0 )
        {
            int posTemp;
            for(posTemp = 0;posTemp<index;posTemp++)
                if(array[posTemp] == -1)
                    break;

            for(int k=posTemp;k<index-1;k++)
            {
                array[k]=array[k+1];
            }
            index--;
            countSame--;
        }

        return dupFlag;
    }
}

public class HighArrayClassApp
{
    public static void main(String[] args)
    {

        Scanner sc_maxSize = new Scanner(System.in);
        System.out.println("你希望数组的长度有多长?");
        int maxSize = sc_maxSize.nextInt();

        HighArrayClass hac = new HighArrayClass(maxSize);

        System.out.println("我们已经得到一个长度为"+maxSize+"的数组");

        System.out.println("现在该数组的最大值是:"+hac.getMax());

        System.out.println("现在我们需要填充它。");
        System.out.println("这里使用1到100的随机数来填充它");

        for(int i = 0;i<maxSize;i++)
        {
            int tempInt = (int)(Math.random()*100+1);
            hac.insertElemets(tempInt);
        }

        System.out.println("填充好的数组如下");
        hac.displayElements();

        System.out.println("你想找寻哪个数字?");
        Scanner sc_find = new Scanner(System.in);
        int goalNum = sc_find.nextInt();

        System.out.println("正在尝试搜索。。。。");
        System.out.println("搜索结果如下:");
        hac.findElements(goalNum);

        System.out.println("你想删除哪个数字?");
        Scanner sc_delete = new Scanner(System.in);
        int deleteNum = sc_delete.nextInt();

        System.out.println("正在尝试删除。。。。");
        System.out.println("删除结果如下:");
        hac.deleteElements(deleteNum);

        System.out.println("删除后的数组如下:");
        hac.displayElements();

        //if((int tempMax = hac.getMax()) != -1)//java不支持这种表达方法
        System.out.println("现在该数组的最大值是:"+hac.getMax());

        System.out.println("现在正在删除最大值。。。。。");
        hac.removeMax();
        System.out.println("已经删除了最大值");

        System.out.println("删除后的数组如下:");
        hac.displayElements();

        System.out.println("现在要对数组进行排序:");
        HighArrayClass hacOrder = new HighArrayClass(maxSize);

        for(int i = 0;i<maxSize;i++)
        {
            int tempMax = hac.getMax();
            if(tempMax ==  -1)
                break;
            hacOrder.insertElemets(tempMax);
            hac.removeMax();
        }
        System.out.println("排序后的数组为:");
        hacOrder.displayElements();

        System.out.println("该数组中是否有相同的元素?");
        if(hacOrder.noDup())
            System.out.println("数组中有相同元素。");
        else
            System.out.println("数组中没有相同元素。");

        System.out.println("经过处理后的数组如下:");
        hacOrder.displayElements();

        System.out.println("-------------------------------");

        System.out.println("插入一些新的数据用于测试:");
        HighArrayClass hac_noDup = new HighArrayClass(10);
        hac_noDup.insertElemets(12);
        hac_noDup.insertElemets(56);
        hac_noDup.insertElemets(12);
        hac_noDup.insertElemets(2);
        hac_noDup.insertElemets(17);
        hac_noDup.insertElemets(12);
        hac_noDup.insertElemets(4);
        hac_noDup.insertElemets(17);
        hac_noDup.insertElemets(6);
        hac_noDup.insertElemets(12);

        System.out.println("插入后数组的数据为:");
        hac_noDup.displayElements();

        System.out.println("该数组中是否有相同的元素?");
        if(hac_noDup.noDup())
            System.out.println("数组中有相同元素。");
        else
            System.out.println("数组中没有相同元素。");

        System.out.println("经过处理后的数组如下:");
        hac_noDup.displayElements();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值