二十六日目は復習・復習…
間もあきまくって忘れまくってるおかげで勉強が先に進まない…早いこと喉完治せんかな。いや完治せずとも勉強はできるんだけどさ。
復習を兼ねてプログラム作成
忘れていることも多いので、復習と今どの程度のことができるのかを確認する為にと、簡単にだけどプログラム組んでみた。今回は10問クイズに挑戦!
今回は2つに分けて作ってみた。まず1つ目から…
import java.io.*; public class Quizquiz { //集計用変数の宣言 private static int sum = 0; public static void main(String args) throws IOException { System.out.println("クイズの時間です。"); System.out.println("開始するなら'Y'を、中止するなら'N'を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int i; for(i = 0; i < 1;) { String yn = br.readLine(); char ny = yn.charAt(0); if(ny == 'Y' || ny == 'y') { System.out.println("クイズを開始します。\n10点満点で、1問1点です。"); i = 1; } else if(ny == 'N' || ny =='n') { System.out.println("クイズを中止します"); break; } else { System.out.println("'Y'か'N'で入力して下さい。"); } } //正解数の集計用配列 int ans = new int[10]; int q = 0; Quizmondai qm = new Quizmondai(); ans[q] = qm.quiz1(); q++; ans[q] = qm quiz2(); q++; ans[q] = qm.quiz3(); q++; ans[q] = qm.quiz4(); q++; ans[q] = qm.quiz5(); q++; ans[q] = qm.quiz6(); q++; ans[q] = qm.quiz7(); q++; ans[q] = qm.quiz8(); q++; ans[q] = qm.quiz9(); q++; ans[q] = qm.quiz10(); q++; //正解数の集計 for(int j=0; j<10; j++) { sum += ans[j]; } if(sum == 10) { System.out.println("全問正解おめでとうございます!" + "\nなんと" + sum + "点満点です。"); System.out.println("素晴らしい!"); } else if(sum == 9) { System.out.println("なんと" + sum + "点です"); System.out.println("満点まであと一歩、惜しい!"); } else if(sum <= 1) { System.out.println("あなたの成績は" + sum + "点です"); System.out.println("次回に期待します。"); } else System.out.println("あなたの成績は" + sum + "点です"); } }
2つ目には、出題される問題をずらずらーっと並べてみた。
import java.io.*; public class Quizmondai { private int jg,num; private String ans,moji; private char ch,eiji; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public int quiz1() throws IOException { System.out.println("整数解答の問題例"); ans = br.readLine(); num = Integer.parseInt(ans); if(num == 整数解答) { System.out.println("正解です"); jg = 1; } else { System.out.println("不正解です"); jg = 0; } return jg; } public int quiz2() throws IOException { System.out.println("文字列解答の問題例"); moji = br.readLine(); if(moji.equals("文字列解答")) { System.out.println("正解です"); jg = 1; } else { System.out.println("不正解です"); jg = 0; } return jg; } public int quiz3() throws IOException { System.out.println("半角英文字解答の問題例"); ans = br.readLine(); eiji = ans.charAt(0); if(eiji == '半角英文字解答') { System.out.println("\n正解です"); jg = 1; } else { System.out.println("不正解です"); jg = 0; } return jg; } //上記3つパターンを参考に、quiz10までメソッドを作成する }
解答が全角文字列の場合、数字の場合、半角英文字の場合と3パターンの雛形を作成。これをもとにquizメソッドを1〜10と作成することになる。
気になってる点
- Quizmondaiのquiz*メソッドを呼び出すところをfor文による繰り返し処理にしたかった
どうしたものかよくわからなかったので、単純に1〜10をそれぞれ呼び出す形にした。何かいい手は無いだろうか…うまくすれば10問固定じゃなく1〜10問出題されるように変更できそうなのに。
- 文字列解答の比較
今回は解答の取得とif文の条件を次のようにしている。
moji = br.readLine();
if(moji.equals("文字列解答"))
これを最初、次のように記述していた。
moji = br.readLine();
if(moji == "文字列解答")
すると、解答と同じ文字列を入力してもtrueではなくfalse判定しかされなくなった。原因もよくわからず、色々いじった結果次のように記述するとtrue判定が出た。
ans = br.readLine();
moji = ans.intern();
if(moji == "文字列解答")
リファレンスで調べてみたところ…正準表現を返す? なんだこりゃ??
結局理解するに至らず、色々調べたところequalsメソッドの存在に気づいて今の形になったけど…