二十六日目は復習・復習…

間もあきまくって忘れまくってるおかげで勉強が先に進まない…早いこと喉完治せんかな。いや完治せずとも勉強はできるんだけどさ。

復習を兼ねてプログラム作成

忘れていることも多いので、復習と今どの程度のことができるのかを確認する為にと、簡単にだけどプログラム組んでみた。今回は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メソッドの存在に気づいて今の形になったけど…