[英]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.