1. BMI を計算するメソッド (参考: Quiz0602.java) static double bmi(double height, double weight) 2. int型配列の要素を順に表示するメソッド。 static void print(int[] a) 3. 配列aの各要素を1つずらした配列を返す メソッド。(参考: Quiz1603.java) a[0]→b[1]、a[1]→b[2]、・・・ a[8]→b[9]、a[9]→b[0] static int[] rotate(int[] a) int型配列の要素を順に並べて文字列化する メソッド。 static String toString(int[] a) 4.西暦年yearを渡して、その年がうるう年 かどうかを判断するメソッド。 (参考: Quiz0704.java) static boolean isLeap(int year) 5.月(1~12)monthを渡して、その月の日数 を返すメソッド。 (参考: Quiz1606.java) static int daysOf(int month) 6. (線形探索) int型配列aとint型データを渡して、その データが配列要素にあれば、そのときの添字 を返すメソッド。なければ、-1を返す。 (参考: Quiz1607.java) static int sequentialSearch(int[] a, int data) 7. (二分探索) int型配列aとint型データを渡して、その データが配列要素にあれば、そのときの添字 を返すメソッド。なければ、-1を返す。 (参考: Quiz1608.java) static int binarySearch(int[] a, int data) 8. (整列) int型配列aを順番に並べ替えるメソッド。 アルゴリズムは、基本交換法、基本選択法、 基本挿入法のいずれを使ってもよい。 (参考: Quiz1609.java、 Quiz1610.java、 Quiz1611.java) static void sort(int[] a) 9. (文字列探索) char型配列textにデータが入っている。 この文字配列textの中に、パターン文字列 (char型配列pattern)を探索するメソッド。 あった場合は、patternの先頭文字と一致す るtextの添字を返す。ない場合は、-1を返す。 アルゴリズムは、力まかせ探索法、BM法のい ずれを使ってもよい。 (参考: Quiz1612.java、 Quiz1613.java) static int indexOf(char[] text, char[] pattern) 10. じゃんけんの手を2つ渡して、勝敗を返 すメソッド。 第1引数が勝った場合1、引分け0、負けた場 合-1を返す。 (参考: Quiz1621.java) static int judge(int te1, int te2) 11.料金表と重さを渡して、その重さに対す る料金を返す。 (参考: Quiz1623.java) static int rate(int[][] rateTable, int weight) ------------------------------------------------- /** * BMI を計算し、表示する。 * 体重 / 身長の2乗 */ public class Quiz1701 { public static void main(String[] args) { System.out.println("BMI = " + bmi(1.62, 55)); } static double bmi(double height, double weight) { return weight / (Math.pow(height, 2)); } } /* 実行結果 BMI = 20.957171162932475 */ ------------------------------------------------- /** * 配列aの各要素を1つずらして、配列bにコピーする。 * a[0]→b[1]、a[1]→b[2]、・・・ a[8]→b[9]、a[9]→b[0] */ public class Quiz1703 { public static void main(String[] args) { int[] a = {5, 3, 7, 9, 0, 1, 2, 8, 4, 6, }; int[] b = new int[a.length]; // 表示する。 System.out.print("a = "); print(a); // ずらしてコピーする。 b = rotate(a); // 表示する。 System.out.print("b = "); print(b); } /** * 指定された配列aの各要素を1つずらして、新しい配列を作って返す。 * @param a 配列 * @return 要素を1つずらした配列 */ static int[] rotate(int[] a) { int[] b = new int[a.length]; for (int i = 0; i b[(i + 1) % b.length] = a[i]; } return b; } /** * 指定された配列aの各要素を並べて表示する。 * @param a 配列 */ static void print(int[] a) { System.out.print("["); for (int i = 0; i System.out.print(a[i] + ", "); } if (a.length > 0) { System.out.print(a[a.length - 1]); } System.out.println("]"); } } /* a = [5, 3, 7, 9, 0, 1, 2, 8, 4, 6] b = [6, 5, 3, 7, 9, 0, 1, 2, 8, 4] */ ------------------------------------------------- /** * 西暦年を指定し、この西暦年がうるう年かどうかを表示する * 西暦年が4の倍数ならうるう年 * 上記の条件でも、100の倍数なら平年 * 上記の条件でも、400の倍数ならうるう年 * どの条件にも当てはまらなければ平年 */ public class Quiz1704 { public static void main(String[] args) { int year = 2010; // 西暦年 // 結果を表示する if (isLeap(year)) { System.out.println(year + " 年はうるう年です。"); } else { System.out.println(year + " 年は平年です。"); } } /** * 西暦年を指定し、この西暦年がうるう年かどうかを判断する。 * @param year 西暦年 * @return うるうどしのときtrue、平年のときfalse */ static boolean isLeap(int year) { return (year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0)); } } /* 実行結果 2010 年は平年です。 */ /* 疑似コード */ ------------------------------------------------- /** * 月(1~12)を指定して、その月の日数を表示する */ public class Quiz1705 { public static void main(String[] args) { int month = 6; // 月 // 結果を表示する System.out.println(month + " 月は " + daysOf(month) + " 日です。"); } /** * 月(1~12)を指定して、その月の日数を返す。 * @param month 月 * @return 指定された月の日数 */ static int daysOf(int month) { int[] DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; return DAYS[month - 1]; } } /* 実行結果 6 月は 30 日です。 */ ------------------------------------------------- /** * 7. (線形探索) * 要素数10のint型配列aにデータが入っている。 * コマンドライン引数で、整数値を指定して、その数値が配列要素にあるかどうか、 * あれば、そのときの添字を表示する。 * (参考:午前中のテキストp.58の線形探索) */ public class Quiz1706 { public static void main(String[] args) { int key = Integer.parseInt(args[0]); int[] a = {50, 30, 90, 40, 100, 10, 20, 60, 80, 70, }; // 探索する int index = sequentialSearch(a, key); // 結果を表示する if (index >= 0) { System.out.println(key + " はありました。(index = " + index + ")"); } else { System.out.println(key + " はありませんでした。"); } } /** * 指定された配列の中から、指定されたデータを探す。 * @param a 被検索の配列 * @param key 検索データ * @return 見つかった場合、その添字、見つからなかった場合-1 */ static int sequentialSearch(int[] a, int key) { for (int i = 0; i if (a[i] == key) { return i; } } return -1; } } /* 実行結果 >java Quiz1706 10 10 はありました。(index = 5) >java Quiz1706 50 50 はありました。(index = 0) >java Quiz1706 70 70 はありました。(index = 9) >java Quiz1706 55 55 はありませんでした。 */ ------------------------------------------------- /** * 7. (二分探索) * 要素数10のint型配列aにデータが入っている。このとき、要素の値は昇順に入っている。 * コマンドライン引数で、整数値を指定して、その数値が配列要素にあるかどうか、 * あれば、そのときの添字を表示する。 * (参考:午前中のテキストp.58の二分探索) */ public class Quiz1707 { public static void main(String[] args) { int key = Integer.parseInt(args[0]); int[] a = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, }; // 探索する int index = binarySearch(a, key); // 結果を表示する if (index >= 0) { System.out.println(key + " はありました。(index = " + index + ")"); } else { System.out.println(key + " はありませんでした。"); } } /** * 指定された配列の中から、指定されたデータを探す。 * @param a 被検索の配列。要素は昇順にソートされていなければならない。 * @param key 検索データ * @return 見つかった場合、その添字、見つからなかった場合-1 */ static int binarySearch(int[] a, int key) { int lowerIndex = 0; int upperIndex = a.length - 1; int middleIndex; while (lowerIndex <= upperIndex) {
middleIndex = (lowerIndex + upperIndex) / 2; if (a[middleIndex] <key) {
key) { upperIndex = middleIndex - 1; } else { return middleIndex; } } return -1; } } /* 実行結果 >java Quiz1707 10 10 はありました。(index = 0) >java Quiz1707 50 50 はありました。(index = 4) >java Quiz1707 100 100 はありました。(index = 9) >java Quiz1707 55 55 はありませんでした。 */ -------------------------------------------------