marunomaruno-memo

marunomaruno-memo

Java問題サンプル解答 メソッド(1)

2010年07月14日 | Weblog
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 はありませんでした。 */ -------------------------------------------------