■Report4

■課題

○制御文と配列を用いてオリジナルのJavaアプリケーションによる初級問題を作成せよ。
 併せて、同様な動作を行うC言語のソースコードを示せ。

-------------------------------------------プログラム----------------------------------------

import java.io.*;
	public class repo4_1 {
		public static void main(String args[]) throws Exception {
		BufferedReader myReader = new BufferedReader(
		new InputStreamReader(System.in), 1);

		System.out.println("星座占いです♪");
		System.out.println("あなたの星座は何番?");
		System.out.println(" 1.おひつじ座 3/21~4/19   2.おうし座 4/20~5/20  ");
		System.out.println(" 3.ふたご座 5/21~6/21    4.かに座 6/22~7/22");
		System.out.println(" 5.しし座 7/23~8/22     6.おとめ座 8/23~9/22");
		System.out.println(" 7.てんびん座 9/23~10/23   8.さそり座 10/24~11/21");
		System.out.println(" 9.いて座 11/22~12/21   10.やぎ座 12/22~1/19");
		System.out.println("11.みずがめ座 1/20~2/18  12.うお座 2/19~3/20");
		System.out.println("");
		System.out.print("-----> ");
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String s = new String(in.readLine());
		int m = Integer.parseInt( s );
		
		if (!( m >= 1 && m <=12 )){
		System.out.println("そんな星座は無いっちゅうの!");
		System.out.println("それって何月!?"); 
		System.out.println("・・・まぁいいや。占ってあげる♪");
		}

		System.out.println("");
		System.out.println("あなたの今日の運勢は・・・");
		System.out.println("");
	
		String[] answer = new String[5];
		String a="(^O^)/ チョ〜Happy Day?";
		String b="(°▽° ) なかなかの一日♪";
		String c="(-_-) ・・・いつもと同じ日";
		String d="(´〜`;) ついてない日";
		String e="(;_;) チョ〜最悪な一日";
		answer[0] = a;
		answer[1] = b;
		answer[2] = c;
		answer[3] = d;
		answer[4] = e;
	
		double dblAnswer = Math.random() * 4 ;
		int intAnswer = (int)dblAnswer;
		int k = intAnswer;
	
		if (k == 0)
			System.out.println( answer[0]);
		else if (k == 1)
			System.out.println( answer[1]);
		else if (k == 2)
			System.out.println( answer[2]);
		else if (k == 3)
			System.out.println( answer[3]);
		else
			System.out.println( answer[4]);

		System.out.println("");
		System.out.println("");
		System.out.println("今日も一日元気にがんばろ〜!!");
		System.out.println("");
		System.out.println("*注意*");
		System.out.println(" この占いは一日一回にしてください。");

	}
}

------------------------------------実行結果--------------------------------------

星座占いです♪
あなたの星座は何番?
 1.おひつじ座 3/21~4/19   2.おうし座 4/20~5/20 
 3.ふたご座 5/21~6/21    4.かに座 6/22~7/22
 5.しし座 7/23~8/22     6.おとめ座 8/23~9/22
 7.てんびん座 9/23~10/23   8.さそり座 10/24~11/21
 9.いて座 11/22~12/21   10.やぎ座 12/22~1/19
11.みずがめ座 1/20~2/18  12.うお座 2/19~3/20

-----> 9

あなたの今日の運勢は・・・

(´〜`;) ついてない日

今日も一日元気にがんばろ〜!!

*注意*
 この占いは一日一回にしてください。

 

---------------------------------------Cのソース--------------------------------------

#include <stdio.h>
#include <stdlib.h> /*この二行が必要(rand関数)*/
#include <time.h>

int main() {

printf("星座占いです♪\n");
printf("あなたの星座は何番?\n");
printf(" 1.おひつじ座 3/21~4/19   2.おうし座 4/20~5/20\n");
printf(" 3.ふたご座 5/21~6/21    4.かに座 6/22~7/22\n");
printf(" 5.しし座 7/23~8/22     6.おとめ座 8/23~9/22\n");
printf(" 7.てんびん座 9/23~10/23   8.さそり座 10/24~11/21\n");
printf(" 9.いて座 11/22~12/21   10.やぎ座 12/22~1/19\n");
printf("11.みずがめ座 1/20~2/18  12.うお座 2/19~3/20\n");
printf("----->");

char c;
int m;

c = getchar(); /* cの一文字目*/
m = (int)c - 48; /*アスキーコードから -48する*/

c = getchar(); /* cの二文字目*/
if (!(c == '\n')) { /*二文字目が改行以外の場合*/
m *= 10; /*一文字目の cを10倍して*/
m += (int)c - 48; /* -48した二文字目を +する*/
}

if (!(m >=1 && m <=12)){ /* mが 1〜12以外の場合*/
printf("そんな星座は無いっちゅうの!\n");
printf("それって何月!?\n");
printf("・・・まぁいいや。占ってあげる♪\n");
}
printf("\nあなたの今日の運勢は・・・\n\n");

char *answer[5] ;
answer[0]="(^O^)/ チョ〜Happy Day?";
answer[1]="(°▽° ) なかなかの一日♪";
answer[2]="(-_-) ・・・いつもと同じ日";
answer[3]="(´〜`;) ついてない日";
answer[4]="(;_;) チョ〜最悪な一日";

srand((unsigned)time(NULL)); /*乱数の初期化*/
int k = rand() % 5; /* kは 0から 4の間でランダム生成*/

if (k == 0)
printf( answer[0]);
else if (k == 1)
printf( answer[1]);
else if (k == 2)
printf( answer[2]);
else if (k == 3)
printf( answer[3]);
else
printf( answer[4]);

printf("\n\n今日も一日元気にがんばろ〜!!\n\n");
printf("*注意*\n");
printf(" この占いは一日一回にしてください。\n");

}

■考察

●制御文について●

Javaの制御文はC言語と似ていたので、もう一度復習を兼ねて制御文を調べてみた。

-主な制御文-

分岐
*if文:2方向分岐
*switch文:多方向分岐
反復
*for文:指定回数反復
*while文:前判断型不定回数反復
*do-while文:後判断型不定回数反復
脱出継続
*break文:制御脱出
*continue文:スキップ
その他の制御文
*return文:現在のメソッドを終了し、呼び出し元へ制御を戻す
*synchronized文:コードブロックの同期指定
*throw文:自分で例外をスローする。例外オブジェクトの生成
*try/catch/finally文:例外制御
*assert文:デバッグ用、デフォルトでは無効  

  • if文
  • 	if(条件式){
    		文A
    	}
    	else {
    		文B
    	}
    
    条件式を与え、その条件式が真であれば文Aを、偽であれば文Bを実行する。 else以下は省略可能、その場合条件式が真であれば文Aを実行するが偽であれば何もしない。

  • for文
  • 	for(初期条件;繰り返し条件;継続条件){
    		文
    	}
    
    繰り返し条件が真である限り、文の内容をを繰り返し実行し続ける。

  • while文
  • 	while(繰り返し条件)|
    		文
    	}
    
    文が実行される前に条件が判定され、trueであれば文を実行し、次の繰り返しの為に条件を判定する。

  • switch文
  • 	switch (式) {
      case 1:
        実行内容A
        break;
      case 2:
        実行内容B
        break;
      case 3:
        実行内容C
        break;
      default:
        実行内容D
        break;
    }
    
    式の値が、case1なら実行内容Aを実行し、2なら実行内容Bを実行する。 式の結果がいずれでもなかった場合、実行内容Dが実行される。

    *BufferedReaderオブジェクト

     作成した『文字データの流れ』を一定量ずつまとめてとりこむためのオブジェクト。
     1バイトずつ読み込むのではなく何バイトかまとめて読み込む。

    ●配列について●

    1,? 同じ型を持つ一連の変数の事を一次元配列とよぶ。
    2,? 配列内の個々の要素は配列要素という。
    3,? 配列を作成するには、宣言と割当の二つの手順を踏まなければならない。

    一次元配列の宣言


    type varName[];

    4,? typeにはJavaの有効な型データを指定する。
    5,? varNameには配列の名前を指定する。

    一次元配列の割当


    varName=new type[size];

    6,? varNameには配列の名前を指定し、typeにはJavaの有効なデータ型を入力する。
    7,? 配列にメモリを割り当てる為にnew演算子を用いる。

    一度で配列を用意する


    type varName[] = new type[size];

    8,? この記述の仕方で上記二つの分の役割を果たし一文で配列を用意出来る。
    9,? Javaの配列もC言語と同じような添字で代入可能。
    10,Javaの配列もC言語の配列とほぼ同様に扱う事ができる。

    ■感想・反省

    C言語に直すのに苦労した。。。
    かなりいじったので、javaと Cの違いが結構あるかも・・・
    今回はイチから自分で始めたので、精神的に疲れた(:_:)

    ■参考文献

    独習Java
    やさしいJava