2012-02-25 17 views
1

このメソッドはいくつかのうちの1つです。私はここに "if(dig1.contains()& & dig2.contains()& & res.contains())"という行が正しいかどうか疑問に思っていました。正規表現で 1.文字列に文字がないことを確認する必要があります 2. string1とstring2の合計が3番目の文字列に合致するかどうかを確認する必要があります。それ以外の場合はfalseを返します。皆さんのお手伝いをありがとうございます。これはこれまでのところ私が持っているものです。文字がない場合はtrueを返します。

/** 
    Returns true if the puzzle is solved. 
    @return true if the puzzle has no letters and the 
    first two numbers add up to the third 
*/ 
public boolean isSolved() 
{ 
    String dig1=""+add1; 
    String dig2=""+add2; 
    String res=""+result; 
    //String a1=""+dig1; 
    if(dig1.contains("[^A-Z]") && dig2.contains("[^A-Z]") && res.contains("[^A-Z]")){ 
     int i=Integer.parseInt(dig1); 
     int j=Integer.parseInt(dig2); 
     int k=Integer.parseInt(res); 

     if(i+j==k) 
      return true; 
     else 
      return false; 
    } 
    else 
     return false; 

}

+0

文字列に数字と文字は別として、他の記号が含まれているとしたらどうなりますか? NumberFormatExceptionを取得します。 –

+0

いいえ、それは完全に数字と文字です。入力は次のようになります。add1 = SJF3G add2 = SDFH3 result = 3SH4H。記号やその他のものはありません。ご協力ありがとうございました。 –

+0

もう1つ。私はあなたがこれをする傾向があることに気づいた: 'String dig1 =" "+ add1;'。文字列を連結するには 'String dig1 + = add1;'を実行するか、ある文字列を別の文字列に割り当てる場合は 'String dig1 = add1;'を実行してください。 – user219882

答えて

4

は、なぜあなたはそのために正規表現を使用するのでしょうか?変換が不可能な場合はInteger.parseInt()が例外をスローします。例外をキャッチするだけで、文字列に数字以外の文字列が含まれていることがわかります。

public boolean isSolved() { 
    try { 
     int i = Integer.parseInt(dig1); 
     int j = Integer.parseInt(dig2); 
     int k = Integer.parseInt(res); 
     return (i+j) == k; 
    } 
    catch (NumberFormatException e) { 
     return false; 
    } 
} 
+0

ありがとうございました。それは有り難いです。 –

2

あなたは、try-catchステートメントを持つことができます:

try { 
    int i=Integer.parseInt(dig1); 
    int j=Integer.parseInt(dig2); 
    int k=Integer.parseInt(res); 

    if(i+j==k) 
     return true; 
    else 
     return false; 
    } 
} catch (NumberFormatException numForEx) { 
    return false; 
} 
+0

ありがとうございました。 –

+0

全く問題ありません) – Jon

2

いいえ、これは文字列を整数に変換する複雑な方法です。

public boolean isSolved() 
{ 
    String dig1=""+add1; 
    String dig2=""+add2; 
    String res=""+result; 
    try{ 
     int i=Integer.parseInt(dig1); 
     int j=Integer.parseInt(dig2); 
     int k=Integer.parseInt(res); 

    if((i+j)==k) return true; 
    return false; 
    } catch { 
    return false; 
    } 
} 

だから、基本的に、あなただけのtry/catchブロックでこれをラップすることができ(ザッツはあなたが何を求めている場合)、 はその後、あなたは文字列を事前にチェックするために正規表現を使用する必要はありません。

私はここに私のaddtlコメントを追加しました:

private boolean IsOnlyNumbers(String input){ 
    try{ 
    Integer.parseInt(input); 
    return true; 
    } catch { 
    return false; 
    } 
} 

か、あなたは数を必要とするので、あなたはこれを行うこともできます:あなたはメソッドにそれをリファクタリングし、あらゆる場所にこれを使用しようとしている場合

private int GetNumber(String input){ 
    try{ 
    return Integer.parseInt(input); 
    } catch { 
    return -1; 
    } 
} 

、その後チェック:

var dig1 = GetNumber(add1); 
var dig2 = GetNumber(add2); 
var res = GetNumber(add2); 
if(dig1 > 0 && dig2 > 0 && dig3 > 0) return dig1+dig2 == res; 
+1

あなたのお手伝いを心より感謝します。私はあなたの助けに感謝します。 –

+0

あなたは大歓迎です。あなたは非常に礼儀正しいので、ここで別の提案をしてください:関数全体にする:private boolean containsNoLetters(String input){try {Integer.parseInt(input);真を返します。 }キャッチ{戻りfalse}});あなたはそれを再利用することができます... – mindandmedia

2

私は、このソリューションをお勧めします

public boolean isSolved() { 
    try { 
     int dig1 = Integer.parseInt(add1); 
     int dig2 = Integer.parseInt(add2); 
     int res = Integer.parseInt(result); 

     return dig1 + dig2 == res; 
    } catch (NumberFormatException ex) { 
     return false; 
    } 
} 

すべての文字列が数字である場合、変換は正しく、数字を比較することができます。文字やその他の不正な文字が含まれている場合、例外がスローされ、falseが返されます。

+0

あなたのお手伝いをしてくださったMr. Tomasありがとうございました。 –

+0

@Bartgよろしくお願いいたします。 – user219882

4

別の正規表現を使用することをお勧めします。例えば、あなたは多くの場合、例外が発生します、あなたの現在のコードで

if (dig1.matches("^[0-9]*$") 
    && dig2.matches("^[0-9]*$") 
    && res.matches("^[0-9]*$")) 

を:あなたの文字列が数字のみが含まれている場合は、チェックします小文字の手紙があるとき。

+0

Strandjev氏に感謝します。あなたの助けに感謝。 –