課題
Javaアプリケーションによるオリジナル問題作成と解答例
多くのJava制御文を用いてオリジナルのJavaアプリケーションによる初級
問題を作成し、模範解答例を示せ。
問題
表示されている整数が次にランダムで表示される整数より大か小
か当てるアプリケーションを作成せよ。
回答例
import java.io.*;
import java.util.*;
public class report3 {
public static void main (String args[]) {
int i,a;
int c;
int b = ((int)Math.floor(Math.random()*20))+1;
System.out.println("\n Type 1(=high) or 2(=low).\n\n");
System.out.println("Number is "+b+"!");
for(i=1 ; i<=100 ; i++) {
a = ((int)Math.floor(Math.random()*20))+1;
System.out.println("Selest next number high or low!");
c = highorlow();
if(a == b) {
System.out.println("\nSorry same number "+a+".");
i--;
continue;
}
else if (c == 1 && a >= b) {
System.out.println("Hit! This is high!\n");
}
else if (c == 2 && a <= b) {
System.out.println("Hit! This is low!\n");
}
else if (c != 1 && c != 2) {
System.out.println("Type 1(=high) or 2(=low)!\n");
i--;
continue;
}
else {
System.out.println("You missed. This is "+a+". Next again.");
break ;
}
if (i < 20 ) {
System.out.println("Number is "+a+"!");
}
b = a ;
if (i >= 20 ) {
System.out.println("Perfect! You corrected twenty answers!");
break;
}
}
}
public static int highorlow() {
byte str[] = new byte[100];
try {
System.in.read(str);
return Integer.parseInt(new String(str).trim());
}
catch(Exception e){
return 0;
}
}
}
|
実行結果
[nw0327:~/java3] j03027% java report3
Type 1(=high) or 2(=low).
Number is 19!
Selest next number high or low!
2
Sorry same number 19.
Selest next number high or low!
2
Hit! This is low!
Number is 9!
Selest next number high or low!
1
Hit! This is high!
Number is 15!
Selest next number high or low!
a
Type 1(=high) or 2(=low)!
Selest next number high or low!
あああ
Type 1(=high) or 2(=low)!
Selest next number high or low!
123
Type 1(=high) or 2(=low)!
Selest next number high or low!
2
You missed. This is 16. Next again.
|
考察
((int)Math.floor(Math.random()*20))+1;は、1からをランダムで返します。
Math.floor() 小数点以下を切り捨てます。
Math.random() 0,0<=d<1.0のdの返します。
最小値(nMin)から最大値(nMax)までのランダムな整数値を得る式は
Math.floor(Math.random()*(nMax-nMin+1))+nMin;
となります。
Math.ceil() 切り上げ
Math.floor() 切り捨て
Math.round() 四捨五入
hifhorlow()メソッド内
tryブロックについて
tryブロック内で例外が起きるとと処理を中断し、catchブロックの
()の例外の種類と一致していればcatchブロックの処理を行います。
System.in.read(str) キーボードから配列strに一文字ずつ入力します。
Integer.parseInt() 引数の文字列を整数にして返します。
trim() 文字列の後ろの余分なスペースを削除します。
感想
このアプリケーションはたいしたことないですが考えるのにすごい
疲れました。ほんとはhighかlowか入力してできるようにしたかった
のですができませんでした。ソースは不具合が出るたびに書き換え
てたので、やや見にくくなってしまいました。でもまともに動いて
いるので満足しています。
参考文献
やさしいjava第2版
JAVAクイックリファレンス