簡體   English   中英

為什么我的for循環不會讀取字符串的最后一個字符?

[英]Why will my for loop not read my last char of the string?

我正在嘗試編寫一個基本的Java程序來壓縮輸入中的Java字符串; 例如aabbccdddd ,轉換為a2b2c2d4 該程序按照我的要求做,除了不處理最后一個字符,我得到的是a2b2c2而不是a2b2c2d4的輸出。 我究竟做錯了什么?

for(x = 0, y = 1; x<input.length()-1; x++)
  {
      if (input.charAt(x) != input.charAt(x+1) && count == 1)
      {
        System.out.print(input.charAt(x));
        System.out.print(count);
      }

      else if (input.charAt(x) == input.charAt(x+y))
      {
        count++;          
      }

      else if (input.charAt(x) != input.charAt(x+1) && count >= 2)
      {
        System.out.print(input.charAt(x));
        System.out.print(count);
        count = 1;

      }
      else
      {
        System.out.println("fail");
      }
  }

當下一個字符與當前字符不同時,您將打印計數。 最后一個字符沒有下一個字符。 這就是為什么它不顯示在輸出中的原因。

方法1

您應在循環后添加以下兩行:

System.out.print(input.charAt(input.length()-1));
System.out.println(count);

方法2

如果您對修改原始輸入沒有問題。 您可以在輸入末尾添加其他字符。 此附加字符必須是永遠不會出現在原始字符串中的字符。 說它是#

在循環開始之前執行此操作:

input += "#"; 
for(...)

循環不正確,在input.length()后加“ -1”。 嘗試:

    for(x = 0, y = 1; x<input.length(); x++) {
        // CODE HERE...
    }

您的for循環在遇到某種條件(迫使您打印出正在緩沖的內容)之前結束。 當前(最后一個)字符的計數為4。 您需要在循環后打印出最后一個字符和當前計數。

以下應該做你想做的

public static void main(String[] args) throws Exception {
    String input = "aabbccdddd";
    int count= 1;
    int x, y;
    for (x = 0, y = 1; x < input.length() - 1; x++) {
        char charAtX = input.charAt(x);
        char charAtXPlus1 = input.charAt(x + 1);
        if ( charAtX != charAtXPlus1 && count == 1) {
            System.out.print(input.charAt(x));
            System.out.print(count);
        }

        else if (charAtX == input.charAt(x + y)) {
            count++;
        }

        else if (charAtX != charAtXPlus1 && count >= 2) {
            System.out.print(input.charAt(x));
            System.out.print(count);
            count = 1;

        } else {
            System.out.println("fail");
        }
    }

    System.out.print(input.charAt(x));
    System.out.println(count);
}

您應該學習如何使用適當的調試器並使用適當的調試技術。 例如,我已經將input.charAt(x)返回的值分配給了一個變量,因為我們在各種if-else條件下重用了該值,並且因為在調試窗口中更容易看到它。

由於以下情況,您無法獲得預期的結果

else if(input.charAt(x)!=input.charAt(x+1)&&count>=2)

失敗,因為x + 1位置沒有字符。 因此,您可以添加另一個條件來檢查它是否為最后一個字符,然后繼續執行代碼

while (input.charAt(x) != input.length()-1)

暫無
暫無

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

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