Android Studio期末作业小问题求教

这学期Android Studio的作业是自己设计一个记账本

我的想法是将日期、备注、金额分别放在三个ArrayList里面,就比如

Date[2020/4/15,2020/5/19,2020/5/23]

Amount[23,56,79]

Remark[Lunch,Dinner,Ingredients]

这样

 

但是如果我要统计5月一个月总共支出了多少钱(如上则是56+79=135),我要怎么精准地将5月所花的金额提取出来并相加?还是我用动态数组去记帐的想法本身就是错误的?请各位大佬赐教,感激不尽

谢谢

 

用ArrayList ok的,给出一种候选算法:

    void calculator() {

        final int LENGTH = 3;

        List<String> date = new ArrayList<>(LENGTH);
        date.add("2020/4/15");
        date.add("2020/5/19");
        date.add("2020/5/19");

        List<Integer> amount = new ArrayList<>(LENGTH);
        amount.add(23);
        amount.add(56);
        amount.add(79);

        List<String> remark = new ArrayList<>(LENGTH);
        remark.add("Lunch");
        remark.add("Dinner");
        remark.add("Ingredients");

        // hitMayIndices 中的元素与 amount 中的元素一一对应,如果属于5月则为1否则为0
        List<Integer> hitMayIndices = new ArrayList<>(LENGTH);
        for (int i = 0; i < LENGTH; i++) {
            final String day = date.get(i);
            hitMayIndices.add(isMayDay(day) ? 1 : 0);
        }

        long sum = 0;
        for (int i = 0; i < LENGTH; i++) {
            final int a = amount.get(i);
            sum += a * hitMayIndices.get(i);
        }

        Log.d("MayDay", String.format("sum: %d", sum));
    }

    static boolean isMayDay(String day) {
        if (TextUtils.isEmpty(day)) {
            return false;
        }

        final String month = day.split("/")[1];
        return TextUtils.equals(month, "5") || TextUtils.equals(month, "05");
    }

 

本身就是错误的,动态数组是内存中的,你应用退出就没了,这种数据得持久保存,用个数据库三方工具存下,按条件筛选出来就好了,数据结构是用来提升效率和算法解决复杂问题的,单用来存储是不对的

同上,如果不使用数据库的话,最好是把每次的消费定义为一个bean

bean定义data,amount,remark3个属性,每次添加消费记录就add到List中,退出应用的时候把list转String保存到本地(文件或者SP)

每次打开应用的时候,先将保存的String转换成list,也方便你列表展示所有消费记录,统计的话根据bean的属性刷选list中符合要求的bean存到另一个list,得到新的list,列表展示也好,统计也好,怎么折腾都行