たぼさんの部屋

いちょぼとのんびり

T016) Sansu_Mondai : 算数アプリの問題を自動生成して文字列にする

f:id:donsuka_kk:20121122091719p:plain

Main.java

package com.example.t016_sansu_mondai;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Main extends Activity {
	Context context;
	LinearLayout base;
	Mondai mondai;
	ArrayList<Mondai> mondaiArray = new ArrayList<Mondai>();
	
	
	TextView[] tvArray;
	
	//問題数
	private final int mondaiLength = 10;
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	
	    context = getApplicationContext();
	    base = new LinearLayout(context);
	    setContentView(base);
	    
	    base.setOrientation(LinearLayout.VERTICAL);
	    
	    tvArray = new TextView[mondaiLength];
	    
	    //問題を生成
	    for(int i=0;i<mondaiLength;i++){
	    	tvArray[i] = new TextView(context);
	    	
	    	mondai = new Mondai(context);
	    	mondaiArray.add(mondai);
	    	
	    	//問題の文字列を取得して最後に"="を付加する
	    	String mondaiStr = mondai.getMondaiString() + "=";
	    	//int seikai = mondai.getSeikaiInt();
	    	tvArray[i].setText(i+"問目:"+mondaiStr);
	    	
	    	base.addView(tvArray[i]);
	    }
	    
	    
	}

}

Mondai.java

package com.example.t016_sansu_mondai;

import android.content.Context;
import android.util.Log;

public class Mondai {
	Context context;

	public int kaitou = 0;
	public int seikai = 0;
	public String mondaiStr = "";

	// 算数コース:足し算、引き算、かけ算、割り算
	private static final String FUGOU[] = { "", "+", "-", "×" + "-" };
	private static final int[] COURCE_MASK_TASHIZAN = { 1, 0, 0, 0 };
	private static final int[] COURCE_MASK_HIKIZAN = { 0, 1, 0, 0 };
	private static final int[] COURCE_MASK_TASHIZAN_HIKIZAN = { 1, 1, 0, 0 };
	public static int[] cource = COURCE_MASK_TASHIZAN_HIKIZAN;

	// 桁数:1桁、2桁、3桁
	private static final int KETA1 = 9, KETA2 = 99, KETA3 = 999;
	public static int mondai_keta = KETA1;
	// 問題要素数:何個の数を計算するか: 2 + 1 + 3 なら要素は3とする。
	public static int mondai_youso = 4;
	// マイナス許可:マイナスになっていいかどうか:良いならtrue
	public static boolean minus = false;
	// 小数許可:小数になっていいかどうか:良いならtrue
	public static boolean shousu = false;

	// コンストラクタ
	public Mondai(Context context) {
		this.context = context;
		/*
		 * 問題を生成
		 */
		int fugous[] = new int[mondai_youso];
		int suujis[] = new int[mondai_youso];
		int fugouInt;

		// 符号を生成する
		for (int i = 0; i < mondai_youso; i++) {
			// 最後は(mondai_youso-1のとき)符号を生成しない
			if (i == mondai_youso - 1) {
				fugous[i] = 0;
			} else {
				fugouInt = getFugouInt();
				fugous[i] = fugouInt;

			}

		}

		// 数字を生成する
		for (int j = 0; j < mondai_youso; j++) {
			suujis[j] = getIntRand(1, mondai_keta);

		}

		// 数式の文字列を作る
		for (int k = 0; k < mondai_youso; k++) {
			String fugouStr = FUGOU[fugous[k]];
			// 問題の文字列を生成
			mondaiStr += suujis[k] + " " + fugouStr + " ";

		}
		Log.v("mondaiStr",mondaiStr);
		//FIXME 文字列の数式を計算するロジックをここに
		/*
		 * 
		 */

	}

	// 乱数の生成
	private static int getIntRand(int min, int max) {
		int ret = (int) Math.floor(Math.random() * (max - min + 1)) + min;
		// Log.v("ret","min="+min+",max="+max+",ret="+ret);
		return ret;
	}

	// 計算符号を生成する
	private static int getFugouInt() {
		int kei = 0;
		int fugouInt;
		for (int i = 0; i < cource.length; i++) {
			kei += cource[i];
		}
		Log.v("kei", "" + kei);
		fugouInt = getIntRand(1, kei); // FUGOU[]から抽出するため
		Log.v("fugouInt", "" + fugouInt);
		String fugouStr = FUGOU[fugouInt];
		Log.v("fugouStr", "" + fugouStr);

		return fugouInt;
	}

	// 問題を文字列で返す
	public String getMondaiString() {

		return mondaiStr;

	}

	// 正解をintで返す
	public int getSeikaiInt() {

		return seikai;
	}

	// 答えを格納して、正解かどうかbooleanを返す
	public boolean setKotaeString(String kotae) {
		boolean ret = false;

		return ret;
	}
}