簡體   English   中英

有人可以幫我糾正這個Java循環。 太接近正確了

[英]Can someone help me correct this java loop. It's so close to being right

因此,我有一個名為originalListArrayList ,如下所示:

[鍋,午睡,盆,坐,是,提斯,按扣]

我也有一個名為modifiedListArrayList ,看起來像

[anps,anps,opst,ist,ist,ist,ist,anps]

修改后的列表采用原始列表,刪除標點符號並對其進行排序。 該程序的目的是獲取輸入( originalList ),並查看輸入中是否有字謎。 字謎是由相同字母組成的單詞。 我的循環打印出字謎時出現問題。 這是循環:

    for (int i=0; i<modifiedList.size();i++){
        System.out.print(originalList.get(i));
        for (int j=i+1;j<modifiedList.size();j++){
            if (modifiedList.get(i).contentEquals(modifiedList.get(j))){
                System.out.print(" "+ originalList.get(j));
                originalList.remove(j);
                modifiedList.remove(j);                     
            }

        }System.out.println();

    }

當我運行循環時,我得到以下信息:

pans naps snap
pots
sit it's
tis

一切都是正確的,除了tis沒有被列為Sit的字謎。 這是使用modifiedList.remove(j)原因,它導致第二個循環在到達tis之前退出,並且tis永遠不會用sit打印出來。 modifiedList.remove(j)是必需的,以便在輸出中不會重復單詞。 我將如何解決這個問題,以便tis被列為坐姿的一個字謎?

問題是您要更改數組的索引,但不能更改j。 刪除時,將每個下一個項目的索引減少1。因此,當您單擊它時,它就會匹配。 您將其刪除,然后將tis移至其具有的索引。 然后,將1加到j,它現在從數組末尾運行(因為快照已被刪除)。 因此,刪除j后,需要將j減1。

反轉循環-從陣列的背面到正面。 這樣,刪除條目時,不會更改尚未閱讀的條目的索引。

您的另一個選擇是通過調整循環索引來考慮刪除,但這比較棘手。

(還有另一種選擇是組成一個包含原始字符串和排序后的字符串的對象。制作一個數組,然后使用將對排序后的字符串進行排序的排序方案對其進行排序。然后遍歷列表並注意您可以“運行”相同排序的鍵,而無需刪除。

創建該對象的一種“騙子”方法是將排序后的字符串和原始字符串放在一起,並用空格或其他特殊字符隔開,然后對字符串進行排序。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM