WeAreJk
T320008、石川恭雅
T320033、久保友悟
T320098、宮川裕貴
**********
5.17 フィボナッチ数列の各項を、第 1 項から第 20 項まで求めて出力するプログラムを作成せよ。フィボナッチ数 列とは、
a1 =1,a2 =1,an=an−1+an−2 (n>2) で与えられる数列である。なお、このプログラムは配列を使わずに実現できるので、配列を使用しないこと。
・プログラム
public class p17 {
public static void main(String[] args) {
int m = 1, n = 1;
System.out.println("a1=" + m);
System.out.println("a2=" + n);
for (int i = 3; i <= 20; i++) {
System.out.printf("a%d=%d\n", i, m + n);
int l = m + n;
n = m;
m = l;
}
}
}
・出力結果
% java p17
a1=1
a2=1
a3=2
a4=3
a5=5
a6=8
a7=13
a8=21
a9=34
a10=55
a11=89
a12=144
a13=233
a14=377
a15=610
a16=987
a17=1597
a18=2584
a19=4181
a20=6765
**********
**********
6.3 MethodSample2.java のような、static な isEven メソッドを利用するプログラムがある。isEven( )は整数が 偶数であるかどうかをチェックするメソッドである。以下の実行結果になるように isEven メソッドの定義を 追加せよ。
実行結果
2 は偶数です 4 は偶数です 6 は偶数です 8 は偶数です 10 は偶数です
・プログラム
public class MethodSample2Ensyuu {
static boolean isEven(int a) {
if (a % 2 == 0) {
return true;
} else
{
return false;
}
}
public static void main(String[] args) {
int nums[] = {1,2,3,4,5,6,7,8,9,10};
for (int n:nums) {
if(isEven(n)) System.out.println(n+"は偶数です。");
}
}
}
・出力結果
% java MethodSample2Ensyuu
2は偶数です。
4は偶数です。
6は偶数です。
8は偶数です。
**********
**********
演習課題(6.6)
MaxSample.java は、staticなmaximum ( メソッド を利用するプログラムである。 maximum ( は渡された 1 次元配列 の要素の最大値を求め、それを返すメソッドである。 MaxSample クラス 内で main ( メソッド が記述されているが、maximum(メソッドの定義は抜けている。 maximum ( メソッドの定義を 追加し、プログラムを完成せよ。
プログラム
public class MaxSanple {
public static int maxnum(int a[]){
int i,max;
max = a[0];
for(i=0;i<a.length;i++){
if(max<a[i]){
max = a[i];
}
}
return max;
}
public static void main(String[] args) {
int a[] = {10,20,50,15,5,40,30};
int b[] = {-10,-20,-50,-15,-5,-40,-35,-60};
System.out.println(maxnum(a));
System.out.println(maxnum(b));
}
}
実行結果
50
-5
**********
**********
演習課題(6.9)
Block
クラス は長方形の幅、高 さ や面積を現す 3 つフィールド x, y , area 及び 3つのメソッド を持っている。 void 型の setBlock( ) メソッドは、長方形の幅と高さを設定し、面積を計算し、 それ を area に代入する。 sameBlock( ) と sameArea( )メソッドは Block クラスオブジェクト を受け取って、長方形の比較を行う。sameBlock( ) は 長方形の次元 を比較し、一致したときに true 、そうでないときに false を返す。 sameArea( ) は長方形の面積を比較し、一致した場合、 true 、そうでないときは false を返す。 Block クラスの sameBlock( ) は記述されているが、 setBlock( ) 及び sameArea( ) の記述は抜けている。 setBlock( ) 及びsameArea( の定義を追加し、動作を確認せよ。
プログラム
class Block{
int x, y; //長方形の幅と高さを格納するフィールド
int area; //長方形の面積を格納するフィールド
// ここで setBlock( )メソッドの定義を追加
void setBlock(int nx, int ny) {
x = nx;
y = ny;
area = x*y;
}
boolean sameBlock(Block obj) {
if( (obj.x == x) && (obj.y == y) )return true;
else return false;
//この文は次のように省略できる。
// return (obj.x == x) && (obj.y == y);
}
// ここで sameArea( )メソッドの定義を追加
boolean sameArea(Block obj) {
return (obj.area == area);
}
}
public class BlockSample {
public static void main(String args[]){
Block obj1 = new Block( );
Block obj2 = new Block( );
obj1.setBlock(4,6);
obj2.setBlock(8,3);
System.out.println("obj1 は obj2 と一致する:" + obj1.sameBlock(obj2));
//obj1.sameBlock(obj2)は obj1 と obj2 のサイズを比べる
//obj2.sameBlock(obj1)のように書いても良い
System.out.println("obj1 は obj2 と同じ面積を持つ:" + obj1.sameArea(obj2));
//obj1.sameArea(obj2)は obj1 と obj2 の面積を比べる
//obj2.sameArea(obj1) のように書いても良い
}
}
実行結果
$ javac BlockSample.java && java BlockSample
obj1 は obj2 と一致する:false
obj1 は obj2 と同じ面積を持つ:true
********
**********
6.17 check(int a, int … n)メソッドを持つプログラムを作成する。check は、a の値が可変引数の合計値を上回るときに true、そうではないときに false を表示するメソッドである。
プログラム
public class enshu6_17 {
static boolean check(int a, int ... n){
int x = 0;
for(int i: n){
x += i;
}
return a > x;
}
public static void main(String args[]) {
System.out.println(check(10,1,1,1));
System.out.println(check(10,10,10,10));
}
}
出力結果
$ javac enshu6_17.java && java enshu6_17
true
false
**********
6.21 コマンドライン引数として利用者に任意の数の整数を入力させ、それらの和を出力するプログラムを作成せよ。( テストデータ1: 15 16 200 300 テストデータ 2: 2 3 50 40 5 10)
プログラム
public class enshu6_21 {
public static void main(String args[]) {
int ans = 0;
for (String s : args) {
int arg = Integer.parseInt(s);
ans += arg;
}
System.out.println(ans);
}
}
出力結果
$ javac enshu6_21.java && java enshu6_21 15 16 200 300
531
$ javac enshu6_21.java && java enshu6_21 2 3 50 40 5 10
110
**********