2017-02-25 50 views
-2

我正在嘗試編寫一個能夠反轉這個詞的程序。如何調試我的程序以反轉一個單詞?

我的代碼:

public class reverseword 

{ 
static String s = "AHAMED"; 
static char[] c = s.toCharArray(); 
static char[] reverse = new char[c.length]; 

public static void main(String[] args) 
{ 

    for(int i = 0; i < c.length - 1; i++) 
    { 
     for(int j = reverse.length - 1; j >=0 ; j = j -1) 
     { 
      reverse[j] = c[i]; 
     } 
    } 
    String r = String.valueOf(reverse); 
    System.out.println(r); 
} 
} 

輸出:

EEEEE 

預期輸出:

DEMAHA 

我不知道是什麼我做錯了。

+1

請勿使用嵌套for循環。使用一個**單** for循環。 –

+0

呃,它看起來像我一樣,@羅伯特。 –

回答

1

你的循環應該是這樣的:

for(int i = 0; i < c.length - 1;) 
     for(int j = reverse.length - 1; j >=0 ; j--,i++) 
      reverse[j] = c[i]; 

可以進一步通過使用一個循環增強:

for (int i=0, j=(reverse.length - 1); i < (c.length - 1) || j >= 0; j--, i++) 
     reverse[i] = c[j]; 

然而,這不是扭轉一個字符串的理想方式。

+0

順便說一句,你只需要中途倒轉一個字符串。 –

+0

糟糕,我只注意到它使用了兩個不同的數組。半路詭計適用於交換* one *數組中的字符。 –

0

首先,這是錯誤的:

i < c.length - 1 

你從來沒有得到最後一個符號。二者必選其一

i < c.length 

i <= c.length - 1 

並嘗試在你的心中,以「執行」內部循環 - 它會得到你寫的正是 - 以符號從Ç,然後將其設置到反向的所有地方。它使得所有符號c(除了最後一個,請參閱前面的錯誤) - 所以只有最後一次嘗試存儲在反向。 您應消除內部循環和使用建築像

reverse[(c.length-1)-i] = c[i] 
0

你並不需要第二個陣列 - 一個StringBuilder更好。我不是坐在一個IDE的前面,但嘗試這樣的事情:

var sb = new StringBuilder(); 
for (int i = originalString.Length - 1; i >= 0; i--) 
    sb.append(originalString[i]); 

如果你真的想兩個數組,你仍然只需要一個循環。我沒有測試過,但嘗試這樣的:

int j = 0; 
for (int i = originalString.Length - 1; i >= 0; i---) { 
     array[j] = originalString[i]; 
    j++; 
} 

再次,我不在IDE,所以這可能需要稍微調整。