主頁 > 後端開發 > Java 雙指標專案中的實際應用

Java 雙指標專案中的實際應用

2023-05-05 08:18:30 後端開發

背景說明

最近在做財務相關的系統,對賬單核銷預付款
從技術角度來看就是將兩個陣列進行合并

對賬單核銷預付款前提條件:

  1. 對賬單總金額必須等于未核銷金額

資料示例

對賬單資料

單號 金額
B0001 100
B0002 80
B0003 120

預付款資料

單號 未核銷金額
PRE001 110
PRE002 190

結果資料

預付款單號 核銷金額 對賬單號
PRE001 100 B001
PRE001 10 B002
PRE002 70 B002
PRE002 120 B003

通過分析可以使用JAVA雙指標演算法可以實作這個需求
雙指標主要用于遍歷陣列,兩個指標指向不同的元素,從而協同完成任務,

代碼實作

public static void main(String[] args) {
    class Info {
        private String formId;
        private BigDecimal amount;
    
        public String getFormId() {
            return formId;
        }
    
        public void setFormId(String formId) {
            this.formId = formId;
        }
    
        public BigDecimal getAmount() {
            return amount;
        }
    
        public void setAmount(BigDecimal amount) {
            this.amount = amount;
        }
    }
    
    List<Info> billBatchlist = new ArrayList<>();
    Info info = new Info();
    info.setFormId("B0001");
    info.setAmount(new BigDecimal(100));
    billBatchlist.add(info);
    info = new Info();
    info.setFormId("B0002");
    info.setAmount(new BigDecimal(80));
    billBatchlist.add(info);
    info = new Info();
    info.setFormId("B0003");
    info.setAmount(new BigDecimal(120));
    billBatchlist.add(info);
    
    List<Info> payVerifyControlList = new ArrayList<>();
    Info info1 = new Info();
    info1.setFormId("PRE0001");
    info1.setAmount(new BigDecimal(110));
    payVerifyControlList.add(info1);
    info1 = new Info();
    info1.setFormId("PRE0002");
    info1.setAmount(new BigDecimal(190));
    payVerifyControlList.add(info1);
    billBatchlist.forEach(a -> {
        System.out.println("BillFormId:" + a.formId + ",Amount:" + a.getAmount());
    });
    payVerifyControlList.forEach(a -> {
        System.out.println("PreFormId:" + a.formId + ",Amount:" + a.getAmount());
    });
    System.out.println("==================================");
    
    int i = 0, j = 0;
    BigDecimal preAmount = new BigDecimal(0);
    BigDecimal billAmount = new BigDecimal(0);
    while (i < billBatchlist.size() && j < payVerifyControlList.size()) {
        if (preAmount.compareTo(BigDecimal.ZERO) == 0) {
            preAmount = billBatchlist.get(i).amount;
        }
        if (billAmount.compareTo(BigDecimal.ZERO) == 0) {
            billAmount = payVerifyControlList.get(j).amount;
        }
    
        //當前核銷金額
        BigDecimal verifyAmount = new BigDecimal(0);
        if (preAmount.compareTo(billAmount) > -1) {
            verifyAmount = billAmount;
            // pre剩余
            preAmount = preAmount.subtract(verifyAmount);
            billAmount = new BigDecimal(0);
        } else {
            verifyAmount = preAmount;
            // bill剩余
            billAmount = billAmount.subtract(verifyAmount);
            preAmount = new BigDecimal(0);
        }
    
        System.out.println("當前核銷金額:" + verifyAmount + ",preAmount剩余:" + preAmount + ",billAmount剩余:" + billAmount);
        //大于等于0
        if (preAmount.compareTo(BigDecimal.ZERO) == 0) {
            i++;
        }
        if (billAmount.compareTo(BigDecimal.ZERO) == 0) {
            j++;
        }
    }
    }

列印結果:

BillFormId:B0001,Amount:100
BillFormId:B0002,Amount:80
BillFormId:B0003,Amount:120
PreFormId:PRE0001,Amount:110
PreFormId:PRE0002,Amount:190
==================================
當前核銷金額:100,preAmount剩余:0,billAmount剩余:10
當前核銷金額:10,preAmount剩余:70,billAmount剩余:0
當前核銷金額:70,preAmount剩余:0,billAmount剩余:120
當前核銷金額:120,preAmount剩余:0,billAmount剩余:0


作者:taoz
出處:www.cnblogs.com/bigbrid
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,

本文如對您有幫助,還請多幫 【推薦】 下此文,
如果喜歡我的文章,請關注我的公眾號

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551605.html

標籤:其他

上一篇:Java練手專案(尚硅谷的),不涉及框架,資料庫等。

下一篇:返回列表

標籤雲
其他(158398) Python(38117) JavaScript(25399) Java(18012) C(15221) 區塊鏈(8261) C#(7972) AI(7469) 爪哇(7425) MySQL(7157) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5334) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4565) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1964) Web開發(1951) HtmlCss(1931) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Java 雙指標專案中的實際應用

    背景說明 最近在做財務相關的系統,對賬單核銷預付款從技術角度來看就是將兩個陣列進行合并 對賬單核銷預付款前提條件: 對賬單總金額必須等于未核銷金額 資料示例 對賬單資料 | 單號 | 金額 | | | | | B0001 | 100 | | B0002 | 80 | | B0003 | 120 | ......

    uj5u.com 2023-05-05 08:18:30 more
  • Java練手專案(尚硅谷的),不涉及框架,資料庫等。

    軟體:idea 我是先建立了一個空白的專案,自己創建的src包和其下面的包。 **問題一:**建立包之后發現格式為src.com.tjp.bean 沒辦法建立其他與bean同級的service test utils view 等。只允許繼續建立bean的子包。 解決: 這是因為idea自動會折疊空白 ......

    uj5u.com 2023-05-05 08:12:43 more
  • Python教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Python由荷蘭數學和計算機科學研究學會的吉多·范羅蘇姆于1990年代初設計,作為一門叫做ABC語言的替代品。 Python提供了高效的高級資料結構,還能簡單有效地面向物件編程。Python語法和動態型別,以及解釋型語言的本質,使它成為多數平臺上寫腳本和快速開發應用的編程語言, [2] ......

    uj5u.com 2023-05-05 08:06:50 more
  • JUC并發編程原理精講(原始碼分析)

    并發編程是指在程式中使用多執行緒技術來實作并行處理的能力。多執行緒機制使得程式可以分解成互不干擾的任務,從而提高了程式執行的效率。并發編程可以通過對執行緒的創建,管理和協作進行控制,以實作更加高效的并發執行。并發編程的優點包括:① 提高程式執行效率:通過多執行緒并行處理,程式的處理速度可以顯著提高。② 增強... ......

    uj5u.com 2023-05-05 08:00:35 more
  • 【pandas基礎】--資料讀取

    資料讀取是第一步,只有成功加載資料之后,后續的操作才有可能。 pandas可以讀取和匯入各種資料格式的資料,如CSV,Excel,JSON,SQL,HTML等,不需要手動撰寫復雜的讀取代碼。 1. 各類資料源 pandas提供了匯入各類常用檔案格式資料的介面,這里介紹3種最常用的加載資料的介面。 1 ......

    uj5u.com 2023-05-05 07:53:23 more
  • 一文吃透Tomcat核心知識點

    架構 首先,看一下整個架構圖。最全面的Java面試網站 接下來簡單解釋一下。 Server:服務器。Tomcat 就是一個 Server 服務器。 Service:在服務器中可以有多個 Service,只不過在我們常用的這套 Catalina 容器的Tomcat 中只包含一個 Service,在 S ......

    uj5u.com 2023-05-05 07:52:47 more
  • SpringBoot匯出Word檔案的三種方式

    SpringBoot匯出Word檔案的三種方式 一、匯出方案 1、直接在Java代碼里創建Word檔案,設定格式樣式等,然后匯出。(略) 需要的見:https://blog.csdn.net/qq_42682745/article/details/120867432 2、富文本轉換后的HTML下載為 ......

    uj5u.com 2023-05-05 07:52:09 more
  • golang推薦的命名規范

    二 golang推薦的命名規范 很少見人總結一些命名規范,也可能是筆者孤陋寡聞, 作為一個兩年的golang 開發者, 我根據很多知名的專案,如 moby, kubernetess 等總結了一些常見的命名規范。 命名規范可以使得代碼更容易與閱讀, 更少的出現錯誤。 檔案命名規范 由于檔案跟包無任何關 ......

    uj5u.com 2023-05-05 07:51:51 more
  • golang基礎知識

    一 golang基礎知識 Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種計算機編程語言語言。 設計初衷 Go語言是谷歌推出的一種的編程語言,可以在不損失應用程式性能的情況下降低代碼的復雜性。谷歌首席軟體工程 ......

    uj5u.com 2023-05-05 07:51:41 more
  • 工匠回憶(二)

    接上文 4、條件分支控制流 避免分支嵌套,例外放在代碼片段最前面 4.1、歸約函式 4.2、條件運算式的封裝避免過長而導致可讀性下降 4.3、德摩根定律 4.4、and、or優先級 4.5、or短路效應 4.6、消失的分支 4.6.1、二分查找演算法 4.6.2、字典演算法 5、例外錯誤處理 無需多言 ......

    uj5u.com 2023-05-05 07:51:35 more