簡體   English   中英

如何使程序流控制跳回到Java中以前的循環?

[英]How to Make Program flow control jump back to a former loop in java?

所以我寫了一個代碼,允許用戶在TextArea找到一個單詞。 我幾乎成功了,但有一方面。 在這里,我將向您展示所有代碼並告訴我問題。

if(ta.getText().length() != 0 && t1.getText().length() != 0)
{
    char c1[] = ta.getText().trim().toCharArray();
    char c2[] = t1.getText().trim().toCharArray();
    for(int i=startFlag;i<c1.length;i++)
    {
        if(c1[i]==c2[0])
        {
            start = i;
            break;
        }
    }

    k=start;
    for(int i=0;i<c2.length;i++)
    {
        if(c2[i] != c1[start++])
        {

        }
        else 
            countFlag++;
    }

    if(countFlag==c2.length)
    {
        ta.select(k,c2.length);
        startFlag++;
    }
}

作為參考, taTextAreat1TextField ,用戶在其中輸入要查找的單詞。 我在第二個for循環中遇到問題。 我應該在if ()塊中寫些什么,以便每當c2[i] != c1[start++] ,控件移至第一個for循環,這將再次確定start的值?

創建一種獲取“開始”的方法,然后您可以隨時調用它。

if(ta.getText().length() != 0 && t1.getText().length() != 0)
        {
            char c1[] = ta.getText().trim().toCharArray();
            char c2[] = t1.getText().trim().toCharArray();

            k=getStart(startFlag, c1.length);

            for(int i=0;i<c2.length;i++)
            {
                if(c2[i] != c1[start++])
                {
                    start = getStart(startFlag, c1.length);
                }
                else 
                    countFlag++;
            }

            if(countFlag==c2.length)
            {
                ta.select(k,c2.length);
                startFlag++;
            }

        }

而getStart()是:

public int getStart(int startFlag, int length) {
    for(int i=startFlag;i<length;i++)
            {
                if(c1[i]==c2[0])
                {
                    return i;
                }
            }
}

您可能需要不同的輸入來獲取getStart(),但希望這能貫穿整個思路。

現在設置代碼的方式是不可能的。 要執行您的要求,您需要將當前代碼重構為不同的方法。 更具體地說,您需要將for循環放入其自己的方法中,然后調用這些方法。

因此,您需要為for循環創建一個單獨的方法。

public static int startForLoop(int i) {
    for(int i=startFlag;i<c1.length;i++)
    {
       if(c1[i]==c2[0])
       {
          start = i;
          break;
       }
    }
}

然后,您可以只在開始時調用startForLoop(0)然后在第二個for循環中調用startForLoop(0)

if(c2[i] != c1[start++])
{
    startForLoop(start+1)
}

這將從中斷的地方繼續for循環。 如果您需要再次運行2nd for循環,則還必須為其創建一個單獨的方法,並將它們基本上都放置在while循環中,直到繼續在2nd for循環中找到所需的結果為止。

也許這段代碼可以幫助您尋找什么。 基本上,它會與要搜索的字符串一起移動,同時要記住要搜索的字符串的索引。

抱歉,但是我已經用Java實現了它,但是概念是相同的,返回的結果是我得到的最好的結果。您必須嘗試一下!

private static String searchString(String searchIN,String searchFOR){
        if (searchFOR != "") {
            int index = searchIN.toUpperCase().indexOf(searchFOR.toUpperCase());
            String before = "";
            String highlighted = "";
            String after = "";
            while (index >= 0) {
                int len = searchFOR.length();
                before = searchIN.substring(0, index);
                highlighted = "\"" + searchFOR + "\"";//do what ever you want to do with searched string
                after = searchIN.substring(index + len);
                searchIN = before + highlighted + after;
                index = searchIN.toUpperCase().indexOf(searchFOR.toUpperCase(), index + highlighted.length());
            }
        }
        return searchIN;
    }

暫無
暫無

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

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