0

なぜこれが機能しないのですか?trxFifoArray リストをループして、そのオブジェクト項目を結果リストに渡しています。一部の金額を 2 つに分割する必要があるため、最初にこの 2 つの金額を結果リストに追加する必要があります。金額はarrayList [-9.0000、-6.0000]にあります。したがって、金額リストをループして結果に addFirst を実行すると、アイテムが追加されますが、同じ金額でリストに 2 つの異なる金額があります。

    LinkedList<InvtQaTracer> trxFifoArray = new LinkedList<InvtQaTracer>();
    LinkedList<InvtQaTracer> result = new LinkedList<InvtQaTracer>();
    InvtQaTracer trx = new InvtQaTracer();

    int trxDocoRef = 0;
    for (int j = list.size() - 1; j >= 0; j--) {
        trx = list.get(j);
        System.out.printf("%12.4f %4s%10d  %12s%n", trx.getTrxQty(), trx.getDocType(), trx.getOrdNo(), trx.getLocNo());
        List<BigDecimal> auxAmounts = new ArrayList<BigDecimal>();

        if (trx.getDocType().compareTo("OV") == 0
                || trx.getDocType().compareTo("XV") == 0) {
                    //Do something ...

        } else {
            BigDecimal auxAmount = BigDecimal.ZERO;
            Boolean needRemove = false;
            for (InvtQaTracer tFifo : trxFifoArray) {
                if (trx.getDocType().compareTo("IT") == 0) {

                            auxAmounts.add(tFifo.getTrxQty().negate());

                } 
            }
            if (needRemove) {
                Iterator<InvtQaTracer> iterator = trxFifoArray.iterator();
                int count = 0;
                while (iterator.hasNext()) {
                    InvtQaTracer iqt = iterator.next();
                    if (iqt.getTrxQty().compareTo(BigDecimal.ZERO) == 0) {
                        count++;
                        iterator.remove();
                    }
                }
            }
        }

        if (!auxAmounts.isEmpty()) {
            for (BigDecimal asss : auxAmounts) {
                System.out.println(asss);
                trx.setTrxQty(asss);
                result.addFirst(trx);
            }
        } else {
            result.addFirst(trx);
        }
        for (InvtQaTracer invtQT : trxFifoArray) {
            System.out.printf("%20s%2s%12.4f %10d  %12s%10d%n", "                                               ----------------> ", invtQT.getDocType(), invtQT.getTrxQty(), invtQT.getOrdNo(), invtQT.getLocNo(), invtQT.getDocNo());
        }
    }

このコードは、値が -6.000000 の 2 つのレコードを追加しますが、両方を出力します。コードを理解していただければ幸いです。助けてください!!!

ありがとう。

助けてくれてありがとう!

4

1 に答える 1

0

コードに問題が見つかりました。コードはこのように更新する必要があります

if (!auxAmounts.isEmpty()) {
            LinkedList<InvtQaTracer> result = new LinkedList<InvtQaTracer>();
            //Updated Here
            InvtQaTracer trx = null;
            List<BigDecimal> auxAmounts = new ArrayList<BigDecimal>(); //[-9.000000, -6.000000]
            for (BigDecimal asss : auxAmounts) {
                System.out.println(asss);
            //Updated Here
            trx = new InvtQaTracer();
                trx.setTrxQty(asss);
                result.addFirst(trx);
            }
        } else {
            result.addFirst(trx);
        }

識別されたもう 1 つの変更は、else ループの内部にあります。needRemove 値はデフォルトで false に設定されており、if ループで true かどうかをチェックしています。これは削除できると思います。

于 2013-09-04T13:48:06.273 に答える