質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

479閲覧

四択クイズの正誤判定をString型の引数とフラグを使って行いたい

Seraphim_9

総合スコア17

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/10/25 02:53

正誤判定を正しく行いたい

Swiftを用いで四択クイズのアプリを作成しています。非常に初歩的な質問で申し訳ないのですが、正解の判定をしようとした時、正しく判定されない(appDelegateにbadという不正解を示すフラグがあるのですがそれがデフォルトのtrueのまま更新されなかったり、正解でないところで正解の判定をする事が多い)状況となっています。調べて見ましたが同じ方法を取っている所は見当たらず、teratailを当たらせていただきました
わたしのやり方がまずいのでしょうか、それともソースコードに論理エラーがあるのでしょうか。ご教授いただけると幸いです。

発生している問題・エラーメッセージ

正誤判定の際、判定が正しく行われません。 初期値のまま不正解かどうかを示すflag"bad"が更新されません。 更新されても正しくないところで判定がなされています。

該当のソースコード

Swift4.2

1 func judge(answer :String){ //回答の判定はここ 2 let appDelegate = UIApplication.shared.delegate as! AppDelegate //AppDelegateのインスタンスを取得 3 if answer == correct{ 4 // answer(ボタンの文章) がcorrectと等しいか 5 appDelegate.seikai = appDelegate.seikai + 1 6//正解なので正解数を1加算する 変数はInt型"seikai" 7 appDelegate.bad = false 8 }else { 9//不正解なら不正解判定だけして戻る 10 appDelegate.bad = true 11 } 12 } 13 14 @IBAction func select1(_ sender: UIButton) { //1番を回答した時呼ばれる 15 let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate //AppDelegateのインスタンスを取得 16 17 appDelegate.counter = appDelegate.counter + 1 //現在の問題数を計算 18 let storyboard: UIStoryboard = self.storyboard! 19 let v5 = storyboard.instantiateViewController(withIdentifier: "v5") 20//"ViewController5.swift"に遷移する準備 21 self.present(v5,animated: true, completion: nil) 22 judge(answer: (sentaku1.titleLabel?.text)!) //judge: (answer: String)を呼び出し、引数にはボタンに表示されている文章を設定する(読み込みもとのリソースが正解を文字で表示している為) 23 }

試したこと

・switch case文に置き換えてみましたが等しいことを示す事ができず失敗しました
・badの初期値を変えてみましたが先程の状態が続くのみです

補足情報(FW/ツールのバージョンなど)

OS:macOS High Sierra
IDE:Xcode10
Programming Language:Swift 4.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/10/25 03:47

「正しく判定されない」とか「正解でないところで正解の判定をする」というのは遷移先での判定時のことでしょうか?もしそうなら遷移先で判定している箇所のコードを書いて下さい。
Seraphim_9

2018/10/29 00:51 編集

いえ、遷移先で行なっているのは正解不正解に応じた「正解です」「不正解です」のような表示のみで、判定はこちらのコードで全て行っています。遷移先に書いてあるコードは「フラグが正解なら正解であることを表示しそうでなければ不正解であることを表示しなさい」というようなことのみでそのほかは書かれていません。
fuzzball

2018/10/29 01:10

いや、クイズの正解/不正解の判定のことではなくて(それはjudgeでやっているので見ればわかります)、あなたが「正しく判定されない」と書いているのは、質問に書いているコード上でのことなのか、遷移先(v5)でのことなのか、という質問です。
fuzzball

2018/10/29 01:12

あぁ、解決してた‥。
guest

回答3

0

まずはprintデバッグしてみるといいかもです。
judgeの中ではフラグに値入っていると思います

Swift

1if answer == correct{ 2 // answer(ボタンの文章) がcorrectと等しいか 3 appDelegate.seikai = appDelegate.seikai + 1 4//正解なので正解数を1加算する 変数はInt型"seikai" 5 appDelegate.bad = false 6 print(appDelegate.bad) 7 }else { 8//不正解なら不正解判定だけして戻る 9 appDelegate.bad = true 10 print(appDelegate.bad) 11 }

投稿2018/10/25 03:07

編集2018/10/25 03:14
harumi

総合スコア407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ブレークポイントをjudgeメソッドの最初のほうにつけて実行されているか確認してください。
presentの後にjudge()を呼び出しているのですでに画面は遷移後であり、judgeが呼び出されていない気がします。

投稿2018/10/25 03:04

yskk

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Seraphim_9

2018/10/25 03:12

試してみたところ、初期値のままということはなくなりました。 しかし、最後の問題のみ正しい選択肢で判定されません 正解を選択したのに不正解だと判定されてしまいます なおソースコードに対する変更はjudgeの位置のみで、それ以外の変更はありません
yskk

2018/10/25 03:16

念のため、if文でanswer==correctする直前でanswer、correctそれぞれをprintし、思い通りの内容か確認してみてください
guest

0

自己解決

選択肢や回答などを格納したCSVファイルのデータに入るべきでないところでスペースが入っていたのが原因でした。また、最初の回答にもあったように、judge(answer)の位置が適切でなかったのも原因の一つでした。初歩的な質問でしたが真剣にご回答いただき有難うございました

投稿2018/10/29 01:07

Seraphim_9

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問