import scala.util.control.Breaks
object Main {
def main(args: Array[String]): Unit = {
val b1 = new Breaks
val msg: java.util.Hashtable[String, String] = new java.util.Hashtable[String, String]
msg.put("monument", "2つの数字は")
msg.put("answer", "答えは? ")
msg.put("good", " 正解!\n\n")
msg.put("no", " 残念!\n\n")
msg.put("cond", "%d と %d の、")
val jk: Array[Jyouken] = new Array[Jyouken](4)
jk(0) = new Jyouken("+", 1, 1)
jk(1) = new Jyouken("-", 1, 1)
jk(2) = new Jyouken("*", 1, 1)
jk(3) = new Jyouken("/", 1, 1)
val kekka = Array(0,0)
b1.breakable {
while (true) {
for (i <- 1 to 8) {
val env: Env = new Env(msg, jk((i - 1) / 2), kekka)
env.read.eval.print
if (kekka(1) >= 3) b1.break()
}
printf("レベルアップします!\n\n")
jk.foreach(x => x.levelup)
}
}
printf("正解数 %5d, 誤回答 %5d", kekka(0), kekka(1))
}
}
import java.util
import java.util.{Random, Scanner}
class Env(var msg:util.Hashtable[String, String],val jk:Jyouken, var kekka:Array[Int]){
private val scanner = new Scanner(System.in)
private var x :Int = 0
private var y :Int = 0
private var z :Int = 0
private var rVal: Boolean = false
def read: Env = {
val w1 = jk.getitibanme * 10
val w2 = jk.getnibanme * 10
val keisan =
jk.en match {
case "+" => "足し算 "
case "-" => "引き算 "
case "*" => "掛け算 "
case "/" => "割り算 "
}
printf("%s", keisan)
printf(this.msg.get("monument"))
val rnd2: Random = new Random()
y = rnd2.nextInt(w2)
val rnd: Random = new Random
x = rnd.nextInt(w1)
if (jk.en == "/"){
if (x == 0 || y == 0) {
x += 1; y += 1
}
}
if (jk.en == "-" || jk.en == "/"){
if (y > x){
val work = x; x = y; y = work
}
}
printf("%3d, %3d の", x, y)
this
}
def eval: Env = {
printf(this.msg.get("answer"))
z = scanner.nextInt()
rVal =
jk.en match {
case "+" => if (z == x + y) true else false
case "-" => if (z == x - y) true else false
case "*" => if (z == x * y) true else false
case "/" => if (z == x / y) true else false
}
this
}
def print:Env = {
printf(this.msg.get("cond"), x, y)
val siki =
jk.en match {
case "+" => "和は"
case "-" => "差は"
case "*" => "積は"
case "/" => "商は"
}
printf("%s %3d", siki, z)
if (rVal) {
printf(this.msg.get("good"))
kekka(0) += 1
} else {
printf(this.msg.get("no"))
kekka(1) += 1
}
this
}
}
class Jyouken(val en:String, val iti: Int, val ni: Int){
private val enzan: String = en
private var itibanme: Int = iti
private var nibanme: Int = ni
def levelup: Jyouken = {
if (enzan == "+" || enzan == "-" || enzan == "/") {
itibanme += 1; nibanme += 1
} else {
itibanme += 1; nibanme = 1
}
this
}
def getitibanme: Int = itibanme
def getnibanme: Int = nibanme
}