2017-02-25 3 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

おっと、私はそれが2つの異なる配列を使用していることに気付いた。中途半端な仕掛けは、* one *配列の文字を入れ替えて動作します。 –

0

まず、これは間違っている:

i < c.length - 1 

あなたが最後のシンボルを取得することはありません。

i < c.length 

または

のいずれかに
i <= c.length - 1 

を使用して、あなたの心の中で内部ループを「実行」してみてください - それはあなたが書いただけで何を得るだろう - それを設定し、Cからシンボルを取りますのすべての場所に。 c(最後のエラーを除く)のすべてのシンボルに対してそれを行います - 最後の試行はの逆に保存されます。 あなたは二番目の配列を必要としない

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

のように内部ループおよび使用の建設を排除すべきである - StringBuilderが優れています。私は、IDEの前に座って、しかし、このような何かしようとしていないよ:あなたが実際には2つのアレイが、あなたはまだ一つだけのループを必要とする場合

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

を。私はそれをテストしていませんが、このような何かを試してみてください:

再び、私はわずかな調整が必要な場合があります。

関連する問題