簡體   English   中英

Java程序的編程邏輯

[英]programming logic of java program

我需要在java中創建一個程序,其中給出的輸入是這樣的:

hhllyyjhhh

輸出應該是

h2l2y2j1h3 

相反,我得到了輸出

h2l2y2j1  

我知道原因,但請告訴我該如何更正,或者告訴我新的邏輯。

在以下代碼中, T是字符數組,而ans是一個空字符串。

        int counter=0;
        for(int i=0;i<T.length;i++)
            {
            for(int j=i;j<T.length;j++)
            { 
                if(T[i]==T[j])
                {
                    counter++;
                }
                else 
                {
                    ans=ans+T[i]+counter;
                    i=j-1;
                    counter=0;
                    break;
                }

for loops之后for loops您需要將最后一個字符值附加到ans因為當前正被跳過。

if(counter>0) {
    ans=ans+T[T.length-1]+counter
}

或者,您只能使用一個for循環來執行以下操作:

    char[] T = "hhllyyjhhh".toCharArray();

    int counter = 1;
    StringBuilder out = new StringBuilder();
    for(int i=0;i<T.length-1;i++) {
        if(T[i]==T[i+1]) {
            counter++;
        } else {
            out.append(T[i]).append(counter);
            counter=1;
        }
    }

    if(counter>0) {
        out.append(T[T.length-1]).append(counter);
    }
    System.out.println(out.toString());

問題是,如果計數完全匹配,您就不要添加最后一個字符,我建議您稍微改變一下方法,並嘗試向前掃描,然后再追加字符和計數(基本上將其他字符移到內循環之外)-

char[] T = "hhllyyjhhh".toCharArray();
String ans = "";
for (int i = 0; i < T.length; i++) {
  int count = 1;
  while (i + count < T.length && T[i + count] == T[i]) {
    count++;
  }
  ans += T[i] + String.valueOf(count);
  i += count - 1;
}
System.out.println(ans);

在此處產生您要求的輸出。

檢查下面的代碼。 評論正在解釋邏輯。

public static void main(String[] args) {
    // invoking our method        
    System.out.println(getCompressedString("hhllyyjhhh"));
}


private static String getCompressedString(String rawString) {

    final StringBuffer sb = new StringBuffer();
    final char[] rawStringChars = rawString.toCharArray();

    // the first symbol
    int counter = 1;
    char processingChar = rawStringChars[0];

    // processing the rest of string symbols
    for (int i = 1; i < rawStringChars.length; i++) {
        // if there's another symbol
        if (processingChar != rawStringChars[i]) {
            sb.append(processingChar);
            sb.append(counter);

            // setting new processing char and new counter
            processingChar = rawStringChars[i];
            counter = 1;
        } else {
            // if there's the same symbol
            counter ++;
        }
    }

    // writing "tail" part
    sb.append(processingChar);
    sb.append(counter);


    return sb.toString();
}

您需要在for循環之外添加最后一個字符及其計數,因為else部分不處理最后一個字符的追加。 在這里,我已經調整了您的代碼以獲得所需的結果。

public static void main(String[] args) {
    char T[] = { 'h', 'h', 'l', 'l', 'y', 'y', 'j', 'h', 'h', 'l', 'a' };
    String ans = "";
    int counter = 0;
    int j = 0;
    for (int i = 0; i < T.length; i++) {
        if (j == T.length - 1) {
            if (T[i] != T[j - 1]) {
                counter = 1;
            }
            break;
        }
        for (j = i; j < T.length; j++) {
            if (T[i] == T[j]) {
                counter++;
                if (j == T.length - 1) {
                    break;
                }
            } else {
                ans = ans + T[i] + counter;
                i = j - 1;
                counter = 0;
                break;
            }
        }
    }
    if (counter > 0) {
        ans = ans + T[T.length - 1] + counter;
    }
    System.out.println(ans);
}

暫無
暫無

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

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