• 検索結果がありません。

と条件式 2 がともに偽の場合に実行される文

ドキュメント内 Essence of Programming Written by Hiroshi Harimoto (ページ 89-103)

第 4 章 Java の文法Ⅰ

条件式 1 と条件式 2 がともに偽の場合に実行される文

[問題 2]

3 つの実数(a,b,c)を読み込み,それらを係数とする 2 次方程式(ax2bxc0) の根を計算して表示する Java applet を作成せよ。

4.4.3 多重選択 else/if 構造

if(条件式 1) {

条件式 1 が真の場合に実行される文 }

else if(条件式 2) {

条件式 2 が真の場合に実行される文 }

else {

条件式 1 と条件式 2 がともに偽の場合に実行される文 }

[多重選択 else/if 構造による GPA の計算]

//ConsoleWindow 上で複数科目の成績(S,A,B,C,F)を入力する。

//S→4 点,A→3 点,B→2 点,C→1 点,F→0 点とする。

//入力した成績の GPA を求める。

//途中で入力を中止する場合は文字「z」を入力する。

import java.io.* ; public class gpa1 {

public static void main(String[ ] args) throws IOException { int i, counter, grade ;

float sum=0, gpa ;

for(i=0; i<100; i++) { //①

System.out.print("成績を入力(終了の場合は z を入力)せよ : ") ; grade=System.in.read( ) ; //②

[89]

//z が入力されたら作業を中止する。

if(grade == 'z') break ; //③

//成績が入力されたら所定の作業を行う。

if(grade == 'S' || grade=='s') sum+=4 ; //④ else if(grade == 'A' || grade=='a') sum+=3 ; //⑤ else if(grade == 'B' || grade=='b') sum+=2 ; //⑥ else if(grade == 'C' || grade=='c') sum+=1 ; //⑦ else sum+=0 ; //⑧

System.in.skip(2) ; //⑨ } //The end of for( )

counter=i ;

gpa=sum/counter ;

System.out.println(counter+"科目の平均:" +gpa) ; } //The end of main( )

} //The end of gpa1.java

① for(i=0; i<100; i++) {

for 繰返し構造を用いて,「i の値を 0 から 99 まで,i の値を 1 ずつ増やしな がら,for ブロックの中の文を繰り返し実行する。」

② grade=System.in.read( ) ;

Java の組み込みメソッド「read」を用いて ConsoleWindow 上から文字を読み 込む。

③ if(grade == 'z') break ;

変数「grade」の値が文字「z」と一致したら,繰り返し(処理)を中止する。

④ if(grade == 'S' || grade=='s' ) sum+=4 ;

⑤ else if(grade == 'A' || grade=='a') sum+=3 ;

⑥ else if(grade == 'B' || grade=='b') sum+=2 ;

⑦ else if(grade == 'C' || grade=='c') sum+=1 ;

⑧ else sum+=0 ;

変数「grade」の値が文字「S/s」,「A/a」,「B/b」,「C/c」と一致したら,変数「sum」

の値にそれぞれ「4」,「3」,「2」,「1」を加える。変数「grade」の値がそれ以 外だったら,変数「sum」の値に「0」を加える。

[90]

⑨ System.in.skip(2) ;

改行文字分(半角 2 文字分)をスキップする。

4.4.4 多重選択 switch/case 構造

・式の値に基づいて指定された処理が行われる。

switch(式) {

case 値 1 : 文 1 ; break ; case 値 2 : 文 2 ; break ; ・・・・・・・・・・・・

default : 文 n ; break ; } //The end of switch-case block

* 式の値が値 1 と等しい場合には文 1 が実行され,式の値が値 2 と等しい 場合には文 2 が実行され,………,それ以外の場合には文 n が実行される。

文を実行した後は break 文により switch-case ブロックを抜ける。

* 式として指定できるのは,暗黙の型変換で int 型に変換できる型(char, byte, short, int)に限られる。

* break 文は,switch-case ブロックから抜け出すための命令文である。

break 文を指定しないと,1 つの文が実行された後,すぐ下の行の文が実行 されるようになる。

switch(shoe_size) {

case 22 : price=8800 ; break ; case 23 : price=9200 ; break ; default : price=9000 ; break ;

}

[91]

[多重選択 switch/case 構造による GPA の計算]

import java.io.* ; public class gpa2 {

public static void main(String[ ] args) throws IOException { int i, k=0, counter, grade ;

double sum=0, gpa ; for(i=0; i<100; i++) {

System.out.print("成績を入力(終了の場合は z を入力)せよ : ") ; grade=System.in.read( ) ;

if(grade == 'z') break ; switch(grade){

case 'S' : case 's' : sum+=4 ; break ; case 'A' : case 'a' : sum+=3 ; break ; case 'B' : case 'b' : sum+=2 ; break ; case 'C' : case 'c' : sum+=1 ; break ; case 'F' : case 'f' : sum+=0; break ; default : System.out.println( ) ;

System.out.println("★成績を正しく入力せよ★") ; System.out.println( ) ;

k++ ; break ; } //The end of switch( ) System.in.skip(2) ; } //The end of for( ) counter=i-k ;

gpa=sum/counter ;

System.out.println(counter+"科目の GPA:"+gpa) ; } //The end of main( )

} //The end of gpa2.java

[92]

[問題 3]

上記のプログラム(gpa2.java)を拡張することによって,「S, A, B, C」の場合は

「合格」,F の場合は「不合格」とし,合格の科目数と不合格の科目数を調べて追

加表示するプログラムを作成せよ。

[問題 4]

3 つのサイコロを投げるときの出目の合計値が「7 以下,8~12,13 以上」と なる回数を求めて次のように表示する Java applet を作成せよ。

Throw Dice Reset

出 目 結 果 サイコロ1: 2 7 以下 : 1 回 サイコロ 2 : 3 8〜12 : 0 回 サイコロ 3 : 2 13 以上 : 0 回

合 計 : 7 計 : 1 回

[問題 5]

4 つの整数(a,b,c,x)を読み込み,次の関数 f(x)を求めて表示する Java applet を作成せよ。ただし,「acb」,「axb」でなければならない。





 

 

 

b x c c for

b a b

x b

c x a for

b

c x a a for

c a b

a x

x f

) )(

(

) ( 2

) (

2

) )(

(

) ( 2

) (

[93]

4.5 繰返し構造

4.5.1 for 文による繰返し

for(式 1; 式 2; 式 3) { 式 1 で指定される制御変数の初期値から 実行文 式 2 で指定される制御変数の最終値まで

・・・ 実行文を繰返し実行する。

} そのときの制御変数の増分は式 3 で指定する。

[for 文による繰返し]

import java.awt.* ; import java.awt.event.* ; import java.applet.* ;

//<applet code=loop1.class width=700 height=500></applet>

public class loop1 extends Applet {

Font font=new Font("TimesNewRoman", Font.PLAIN, 24);

public void paint(Graphics g) { g.setFont(font);

int i, num2, num3, yPos=100 ; g.drawString("基 数", 50, 50) ; g.drawString("2 乗値", 150, 50) ; g.drawString("3 乗値", 250, 50) ; for(i=1; i <10; i++) { //① num2=i*i ; //②

num3=i*i*i ; //③

g.drawString(" "+i , 60, yPos) ; //④ g.drawString(" "+num2, 160, yPos) ; g.drawString(" "+num3, 260, yPos) ; yPos+=30 ;

[94]

} //The end of for( ) } //The end of paint( ) } //The end of loop1.java

① for(i=1; i<=10; i++) {

for 繰返し構造を用いて,「i の値を 1 から 10 まで,i の値を 1 ずつ増やしな がら,for ブロックの中の文を繰り返し実行する。」

② num2=i*i ;

変数「i」の値を 2 乗し,その 2 乗値を変数「num2」に代入する。

③ num3=i*i*i ;

変数「i」の値を 3 乗し,その 3 乗値を変数「num3」に代入する。

④ g.drawString(""+i, 60, yPos) ;

変数「i」の値を所定の位置(60, yPos)に表示する。

[for 文による繰返しと繰返しからの抜け出し]

import java.awt.* ; import java.awt.event.* ; import java.applet.* ;

//<applet code=loop2.class width=700 height=500></applet>

public class loop2 extends Applet {

Font font=new Font("TimesNewRoman", Font.PLAIN, 24);

public void paint(Graphics g) { g.setFont(font) ;

int count, xPos=30 ;

for(count=1; count<20; count++) { if(count == 10) break ; //① g.drawString(" "+count, xPos, 50) ; xPos+=20 ;

} //The end of for( )

[95]

g.drawString("繰返しを抜けたときの count="+count, 30, 100) ; } //The end of paint( )

} //The end of loop2.java

① if(count == 10) break ;

変数「count」の値が 10 と等しかったら,繰返しから抜け出す。

4.5.2 while 文による繰返し

while(条件) {

実行文 条件が真である限り実行文を繰返し実行する。

・・・

}

[while 文による繰返し]

import java.awt.* ; import java.awt.event.* ; import java.applet.* ;

//<applet code=loop3.class width=700 height=500></applet>

public class loop3 extends Applet {

Font font=new Font("TimesNewRoman", Font.PLAIN, 24);

public void paint(Graphics g) { g.setFont(font) ;

g.setColor(Color.blue) ; int x, y=10 ;

while(y <= 250) { //① x=10 ;

while(x <= 250) { //②

[96]

g.fillRect(x, y, 20, 20) ; x+=40 ;

} //The end of inner while( ) y+=40 ;

} //The end of outer while( ) } //The end of paint( )

} //The End of loop3.java

① while(y <= 250) {

変数「y」の値が 250 以下である限り,外の while ブロックの中の文を繰り返 し実行する。

② while(x <= 250) {

変数「x」の値が 250 以下である限り,中の while ブロックの中の文を繰り返 し実行する。

[問題 6]

ブラウザに次のように表示する Java applet を作成せよ。

1

55555

999999999

[問題 7]

正数 n と実数 x を読み込み

n x x

x x

x 2 3 4 n 1 n

) 1 4 (

3 2 1

  の値を求めて表

示する Java applet を作成せよ。

[97]

4.6 配列

4.6.1 1 次元配列

・基本データ型(整数型,実数型,文字型,真偽型)の変数は宣言するだけでメモリ の中に変数に対応する記憶領域が自動的に生成されるが,参照型変数(配列とオ

ブジェクト)は宣言に加え,new 演算子を用いて明示的に記憶領域を生成しなけ ればならない。

・配列の宣言・生成の書式

* 宣 言: 型名 配列名[ ] ; int seisu[ ] ; (宣言だけでは配列は生成されない。)

* 生 成: 配列名=new 型名[要素数] ; seisu=new int[3] ;

(明示的な生成によりメモリの中に配列領域が作られる。)

* 宣言+生成: 型名 配列名[ ]=new 型名[要素数] ; int seisu[ ]=new int[3] ;

* 配列のイメージ

配列名[要素番号] 内 容 seisu[0] 0 seisu[1] 0 seisu[2] 0

[98]

[アンケート調査分析プログラム]

import java.awt.* ; import java.awt.event.* ; import java.applet.* ;

//<applet code=array1.class width=700 height=500></applet>

public class array1 extends Applet{

Font font ;

int resp[ ]={2,3,6,8,2,7,9,1,5,7,3,4,5,6,10,9,4,3,9,3} ; int i, j, n, freq[ ] ;

public void init( ){

font=new Font("TimesNewRoman", Font.PLAIN, 24) ; setFont(font) ;

freq=new int[11] ; n=resp.length ;

for(i=0; i<n; i++) ++freq[resp[i]] ; }//The end of init( )

public void paint(Graphics g) { int yPos=25 ;

g.drawString("ランク", 25, yPos) ; g.drawString("集計結果", 100, yPos) ; for(j=1; j<freq.length; j++) {

yPos+=25 ;

g.drawString(" "+j, 40 , yPos) ; g.drawString(" "+freq[j], 130, yPos) ; } //The end of for( )

} //The end of paint( ) }//The end of array1.java

[99]

[問題 8]

100 までの整数のなかの素数(どの数の倍数でもない数)を判別して表示する Java applet を作成せよ。

(注)素数とは,1以外の自然数のなかで,「正の約数が 1 と自分自身のみである自然

数」である。言い換えると,素数とは「正の約数の個数が 2 である自然数」である。

4.6.2 2 次元配列

・配列の宣言・生成の書式

* 宣 言: 型名 配列名[ ][ ] ; int seisu[ ][ ] ;

* 生 成: 配列名=new 型名[行数][列数] ; seisu=new int[3][3] ;

* 宣言+生成: 型名 配列名[ ][ ]=new 型名[行数][列数] ; int seisu[ ][ ]=new int[3][3] ;

* 配列のイメージ

配列名[行][列] 内 容 配列名[行][列] 内 容 配列名[行][列] 内 容 seisu[0][0] 0 seisu[0][1] 0 seisu[0][2] 0 seisu[1][0] 0 seisu[1][1] 0 seisu[1][2] 0 seisu[2][0] 0 seisu[2][1] 0 seisu[2][2] 0

[100]

* 各行ごとに列の数が異なる配列の宣言と生成

型名 配列名[ ][ ]=new 型名[行数][ ] ; 配列名[行番号]=new 型名[列数] ; ・・・・・・・・・・・・・

int seisu[ ][ ]=new int[3][ ] ; seisu[0]=new int[1] ; //0 行の列数は 1 seisu[1]=new int[2] ; //1 行の列数は 2 seisu[2]=new int[3] ; //2 行の列数は 3

4.6.3 配列の初期化

・1 次元配列の初期化 : 型名 配列名[ ]={ 要素の値 } ; int seisu[ ]={10, 20, 30 } ;

seisu[0]=10, seisu[1]=20, seisu[2]=30

・2 次元配列の初期化 : 型名 配列名[ ][ ]={ {要素の値}, {要素の値}, … } ; int seisu[ ][ ]={ { 10, 20, 30 } ,

{ 40, 50, 60 } , { 70, 80, 90 } } ;

seisu[0][0]=10, seisu[0][1]=20, seisu[0][2]=30 seisu[1][0]=40, seisu[1][1]=50, seisu[1][2]=60 seisu[2][0]=70, seisu[2][1]=80, seisu[2][2]=90

[101]

・配列生成時の初期値

型 名 初 期 値

char(文字型) ‘\u0000’

boolean(真偽値型) false

int, long(整数型) 0

float, double(実数型) 0.0

String(文字列型) null

object(参照型) null

[問題 9]

2 つの配列の和を求めて表示するプログラムを作成せよ。

1 2 3 10 20 30 11 22 33 + =

4 5 6 40 50 60 44 55 66

[102]

ドキュメント内 Essence of Programming Written by Hiroshi Harimoto (ページ 89-103)

関連したドキュメント