2016-06-22 2 views
0

ユーザーが数字を入力するアプリを作成しようとしています。アプリはそれがプライムかどうかを判断します。ここに私のコードです:私のコードでは、一部の値が機能しないのはなぜですか?

var arr: [Int] = [2, 3, 4, 5, 6, 7, 8, 9] 
let text = Int(textField.text!)! 
for x in arr { 
    if text == 1 { 
     iLabel.text = "NOT PRIME!" 
    } 
    else if x == 2 || x == 3 || x == 5 || x == 7 { 
     iLabel.text = "IT'S PRIME!" 
    } 
    else if text % x == 0 { 
     iLabel.text = "NOT PRIME!" 
     break 
    } 
    else if text % x != 0 { 
     iLabel.text = "IT'S PRIME!" 
     break 
    } 
} 

ほとんどの場合、これは動作します。しかし、変数 "text"を82のように設定すると、結果は "IT'S PRIME!"になります。それが2で均等に割り切れるにもかかわらず...誰も私のコードの欠陥を説明することができますか?

+3

ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようですが、良いデバッガを使用するとrプログラムを1行ずつ実行して、期待どおりにどこからずれているかを確認します。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

答えて

1
if text == 1 else if x == 2 else if text % x == 0 
    ^   ^   ^

それはx=2の引き金となるでしょうし、それがその後、スキップしますモジュロ/剰余チェック、に到達する前にITがPRIME`'S」に設定します。これは、ループ3、5で同じことをトリガーする、7

82は8または9で割り切れないので、実際に素数であるかどうかをチェックせずに、出力ボックスに "IT 'PRIME"を残して、誤って正しい値を出力したりループの最後に残っているチェックを引き起こすことはありません。

+0

ありがとうございます! –

関連する問題