JAVA report3


課題

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クイックリファレンス