Report#3


[課題]

Java制御文を用いてオリジナルのJavaアプリケーションによる初級問題を作成し、模範解答例を示せ。

		☆問題☆与えられた数の約数を調べ、もしあればすべて並べて出力する。
		約数の判定には余りを計算する%を利用する
		
		
		☆解答例☆
		_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		import java.io.*;
		public class J3{ 
		    public static void main(String args[]){
			       System.out.print("input?: ");
				      int x;
				      x = readNum();
				
				      System.out.print( x + "={" );
					     for( int y=1; y<=x; y++ ){
						        if( x%y == 0 ) {
							       System.out.print( y + "," );
							       }
						    }
					     System.out.println( "}" );
		    }
		    public static int readNum() {
			       byte b[] = new byte[100];
				      try {
					         System.in.read(b);
						        return Integer.parseInt((new String(b)).trim());
					         }catch(Exception e) {
					         return 0;
					     }
			   }
		}
		_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
[実行結果]
[nw0311:~/java] j03011% java J3
input?: 9
9={1,3,9,}

input?: 6
6={1,2,3,6,}

input?: 100
100={1,2,4,5,10,20,25,50,100,}

input?: 1000000000000
0={}

input?: 1000000000
1000000000={1,2,4,5,8,10,16,20,25,32,40,50,64,80,100,125,128,160,200,250,256,320,400,500,512,625,640
800,1000,1250,1280,1600,2000,2500,2560,3125,3200,4000,5000,6250,6400,8000,10000,12500,12800,15625
16000,20000,25000,31250,32000,40000,50000,62500,64000,78125,80000,100000,125000,156250,160000
200000,250000,312500,320000,390625,400000,500000,625000,781250,800000,1000000,1250000,1562500
1600000,1953125,2000000,2500000,3125000,3906250,4000000,5000000,6250000,7812500,8000000,10000000
12500000,15625000,20000000,25000000,31250000,40000000,50000000,62500000,100000000,125000000
200000000,250000000,500000000,1000000000,}

[考察]
プログラムソースの考察
		import java.io.*;
		/*入出力に関するものを提供する。import文*/
		
		public class J3{ 
		/*J3というクラスですよ*/
public static void main(String args[]){
			       System.out.print("input?: ");
				   /*「input?:」を表示する*/
				   
				      int x;
				      x = readNum();
					  /*readNum()によって読み込まれる数字xを宣言*/
				
				      System.out.print( x + "={" );
					  /*「xの値と"={"」を表示する*/
					  
					     for( int y=1; y<=x; y++ ){
						 /*for文により、yの値が1からxの値になるまで、y++を繰り返す。*/
						 
						        if( x%y == 0 ) {
								/*今回の問題である約数を判別するには、割った余りの値が0になればいい*/
								
							       System.out.print( y + "," );
								   /*「yの値と","」を表示する*/
							       }
						    }
					     System.out.println( "}" );/*「"}"」を表示する*/
		    }
			
			public static int readNum() {
			/*キーボードで入力された文字を読み込む関数*/
			
			       byte b[] = new byte[100];
				   /*byte(整数)型の配列変数bを宣言*/
				   
				      try {
					  /*例外を対象とするコードブロック*/
					  
					         System.in.read(b);
							 /*キーボードで入力した文字を読みこみ、
							  配列bに入力した文字を挿れる*/
							 
						        return Integer.parseInt((new String(b)).trim());
								/*返り値を計算して返すreturn文*/
								
					         }catch(Exception e) {
							 /*例外を処理する文のブロック。
							 Exception型もしくはサブクラス型のオブジェクトを処理する文をこのブロックに含まる。
							 この場合、ブロックの文はeを使って例外オブジェクトを参照する*/
							 
					         return 0;/*ここで0に戻る*/
					     }
			   }
		}
		


制御文の考察(というか復習)

[if,elseifswitchの違い]

		import java.applet.*;
		public class J3a{
		    public static void main(String args[]){
			int i=1;
			String j=""
			if(i==1){j="January"}
			else if(i==2){j="February"}
			else if(i==3){j="March"}
			else if(i==4){j="April"}
			else if(i==5){j="May"}
			else if(i==6){j="June"}
			else if(i==7){j="July"}
			else if(i==8){j="August"}
			else if(i==9){j="September"}
			else if(i==10){j="October"}
			else if(i==11){j="November"}
			else if(i==12){j="December"}
			else {j="???"}
			System.out.println("ENGLISH*"+j);
			}
		}
		

		import java.applet.*;
		public class J3b{
		    public static void main(String args[]){
			int i=1;
			String j=""
			    switch(i){
				case 1:j="January"break;
				case 2:j="February"break;
				case 3:j="March"break;
				case 4:j="April"break;
				case 5:j="May"break;
				case 6:j="June"break;
				case 7:j="July"break;
				case 8:j="August"break;
				case 9:j="September"break;
				case 10:j="October"break;
				case 11:j="November"break;
				case 12:j="December"break;
				default:j="???"
				}
			System.out.println("ENGLISH*"+j);
			}
		}
		
if(条件式1){ 文1 }else if(条件式2){ 文2 }else{ 文3 }
switch(定数式){ case 値: 文1;break; case 値: 文2;break; default: 文 }
else ifはいくつでも記載することができ、 elseは省略可 能です。 falseであれば次のelse ifの式を実行し、 式の結果がtrueであれば そのelse ifブロック内の文を実行する。 if、else ifのブロックのいずれかの文が 実行されるとif文全体の処理は 終了します。 switch文の動作としてはまずswitchに 書かれている(式)を判別し合致する case値の文を実行します。 もしすべてのcase値に合致しない場合は defaultに 記載されている文の実行を行います。 breakはcase文の後に置き、 そのcase文 の実行後、switch文全体の 処理から抜け出すために使用します。


[forwhileの違い]
		import java.applet.*;
		public class J3c{
		    public static void main(String args[]){
			int i,j=0;
			for(i=1;i<100;i++){
			    j=j+i;
				}
				System.out.println("Total:"+j);
				}
		}
		
		import java.applet.*;
		public class J3d{
		    public static void main(String args[]){
			int i=0,j=0;
			while(i<99){
			    i++;
				j=j+i;
			}
			System.out.println("Total:"+j);
			}
		}
		
for(初期化; 継続条件; 再設定){ 文 }
while(継続条件){ 文 }
まず繰り返し処理を行う前に初期化を実行し、 その後条件を判断しtrueであれば文を実行します。 条件にはブール型(true、false)の値を返す式があります。 条件を判断しtrueで あれば文の実行を行い、 条件がtrueである限り繰り返し処理を行います。 まず初めに式の値を判別します。式 はブール型(true、false) の値を返すものでないといけません。式の値が trueの場合、 文を実行します。文を実行した後、再び式の判別を行い、 値が trueである限り繰り返しを実行します。


[感想&反省]
		今回は結構勉強しました。
		なぜなら制御文のやつを大概忘れてたからです。
		C言語の時の復習をするつもりで、いろんな制御文のホームページを探しまわりました。
		2回もやればもう、大丈夫だと、、、思います、、、、、
		一応、HTMLも見やすくなるように努力しました。(まだまだ見やすい方だと思います)
		じゃあもう今日は帰って寝ます。
		
		<参考文献>
		(某)稚内大学情報系
		j03047