簡體   English   中英

在循環中將變量重置為零

[英]Resetting a variable to zero while in a loop

我有這個代碼,允許我取一個字符串,並用越來越多的數字替換所有元音。

例如,“abababababababababababa”會給我“0b1b2b3b4b5b6b7b8b9b10b11”。 我試圖保持它,以便數字一旦超過9,重置為零並開始重新計數(因此“0b1b2b3b4b5b6b7b8b9b10b11”將改為讀取“0b1b2b3b4b5b6b7b8b9b0b1”)。

我無法想出一種在不太復雜的循環中做到這一點的方法。 如果有某種方法可以實現這一點,有人不介意泄露,那將非常感激。

public static String getNumberString( String s)
{
 String word = s;
 String word1 = word.replaceAll("[AEIOUaeiou]", "@");
 int c = 0;

 String word2 =  word1;
 for( c = 0; c <= word.length(); c++)
 {
       word2 = word2.replaceFirst("@", Integer.toString(c));
 }

 return word2;
}

您可以使用Modulus of 10 (% 10) ,這將在第9位之后包裝計數再次開始。

public static String getNumberString(String s) {
        String word = s;
        String word1 = word.replaceAll("[AEIOUaeiou]", "@");
        int c = 0;

        String word2 = word1;
        for (c = 0 ; c <= word.length() ; c++) {
            word2 = word2.replaceFirst("@", Integer.toString(c % 10));
        }

        return word2;
    }

產量

0b1b2b3b4b5b6b7b8b9b0b1

使用modulo怎么樣?

word2 = word2.replaceFirst("@", Integer.toString(c % 10));

嘗試使用模數十。 它將循環通過,因為當它達到十的倍數時,模數將再次為0。

您可以使用除c之外的其他變量作為循環,通過使用和if條件,您可以檢查c何時變為9並將其重置為0

public static String getNumberString( String s)
{
 String word = s;
 String word1 = word.replaceAll("[AEIOUaeiou]", "@");
 int c = 0;

 String word2 =  word1;
 for(int i = 0; i <= word.length(); i++)
 {
       word2 = word2.replaceFirst("@", Integer.toString(c));
       if(c == 9) {
           c = 0;
       } else {
           c++;
       }
 }

 return word2;
}

在你的循環中,你可以做到

for (c = 0; c <= word.length(); c = (c + 1) % 10) {...}

您必須使用c%10而不是c,如下代碼:

word2 = word2.replaceFirst("@", Integer.toString(c % 10));

而不是用c替換你可以使用c % 10

我會使用String.toCharArray() 您可以使用% 10來確保count在第九位之后換行。 另外,我使用StringBuilder 就像是,

public static String getNumberString(String str) {
    int count = 0;
    StringBuilder sb = new StringBuilder();
    if (str != null) {
        for (char ch : str.toCharArray()) {
            switch (Character.toLowerCase(ch)) {
            case 'a': case 'e': case 'i': case 'o': case 'u':
                sb.append(count);
                ++count;
                count %= 10;
                // or maybe, count = (count > 9) ? 0 : count;
                break;
            default:
                sb.append(ch);
            }
        }
    }
    return sb.toString();
}

然后你可以測試它

public static void main(String[] args) {
    String out = getNumberString("abababababababababababa");
    String expected = "0b1b2b3b4b5b6b7b8b9b0b1";
    System.out.println(out.equals(expected));
}

輸出是

true

暫無
暫無

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

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