2016-04-04 8 views
1

http://codingbat.com/prob/p132118からなぜこのコードは望ましい結果をもたらさないのですか?

2つの文字列を指定すると、それらを一緒に追加して(「連結」と呼ばれます)、結果を返します。ただし、連結によってdouble-charが作成された場合は、charのいずれかを省略すると、 "abc"と "cat"は "abcat"を生成します。すなわち:

public String conCat(String a, String b) { 

String result = a + b; 
String r = ""; 
String f = ""; 

for(int i= 0; i < result.length(); i++) 
{ 
    f = Character.toString(result.charAt(i));  
    if(!(f.equals(result.charAt(i)))) 
    r += f;    
} 

return r; 
} 

私の質問は、IS- "AB" + "BC" を "ABBC" を連結するために自分のコードが発生した論理欠陥がある:

conCat("abc", "cat") → "abcat" 
conCat("dog", "cat") → "dogcat" 
conCat("abc", "") → "abc" 

これは私が働いたソリューションです"abc"の代わりに?

+0

なぜfをStringにキャストしてからcharと比較していますか? – nightuser

答えて

3

a + bの文字列をfと比較すると、result.charAt(i)の結果が得られます。それらは異なる型であるため等しくないので、無条件でr += f;が実行されます。

この問題を修正しても、すでに文字列を連結しているため、アプローチがうまくいかない場合があります。 conCat("ab", "bc")conCat("abbc", "")の前に何かする必要があります。実際には、の文字列を連結します。あなたは、次のすべてに該当する場合、文字を削除する必要が


  1. aは非空で
  2. bではaの最後の文字が同じである
  3. 非空で最初の文字はbです。

この場合、連結する前にbの最初の文字を切り落とすだけです。それ以外の場合は、文字列をそのまま連結します。

public String conCat(String a, String b) { 
if (!a.isEmpty() && !b.isEmpty() && a.charAt(a.length() - 1) == b.charAt(0)) { 
    return a + b.substring(1); 
    } else { 
    return a + b; 
    } 
} 
+0

TSはコードについて質問しました。自分で問題を解決するのは楽しいことではありません。 – nightuser

+0

ありがとう、これは望ましい結果をもたらしますが、なぜ私のコードロジックが機能していないのかを知りたいのです。 – Nkem

+0

@Nkemは説明を編集するために編集されました。 –

関連する問題