1.名簿作成

チームメンバーの名簿を作成するプログラムである。

コンソールから名前を入力させ、"END"を入力したら、今まで入力した名前が表示されるようにしなさい。

なお、名前はArrayListで作った可変長配列に格納すること。

なぜなら、チームメンバー数は不定であるから。

ヒント:Scannerクラスを使うこと。

(出力イメージ)

1人目の名前を入れてください>yamada
2人目の名前を入れてください>imai
3人目の名前を入れてください>shinohara
4人目の名前を入れてください>tabuchi
5人目の名前を入れてください>END
1人目の名前:yamada
2人目の名前:imai
3人目の名前:shinohara
4人目の名前:tabuchi

2.キーワード記憶アプリ

Javaの英字キーワードを暗記するためのアプリケーションのプロトタイプを作成したい。

キーボードから入力されたキーワードを"END"が入力されるまでArrayListに格納したうえで表示するプログラムを作成しなさい。ただし、キーワードのうち5文字未満のものは出題されない予定なので表示しないこと。

なお、"END"は大文字小文字を問わないこととする。つまり"END"、"End"、"end"でも入力を終了させる。

Javaのキーワードを入れてください:new
Javaのキーワードを入れてください:implements
Javaのキーワードを入れてください:extends
Javaのキーワードを入れてください:package
Javaのキーワードを入れてください:import
Javaのキーワードを入れてください:enD
テストに出そうなキーワード
implements
extends
package
import

3.テストの平均点

チームメンバーの確認テストの平均点を計算するプログラムを作成したい。

コンソールから点数を入力させ、-1を入力したら、今まで入力した数値と平均(小数第2位四捨五入1位表示)が表示されるようにしなさい。

なお、この時の数値はArrayListで作った可変長配列に格納すること。

また、数値以外が入力された場合に例外処理を使って対応すること。

ヒント1:ユーザーのキーボード入力を受け付けるにはScannerクラスのnextLineメソッドを使ってください。戻り値はStringなので数値として解釈するメソッドを使ってください。

ヒント2:以下のように書くと小数第2位四捨五入1位表示できます。

System.out.println(String.format("%.1f", 3.1415));





(出力例)

1人目の点数を入れてください>100
2人目の点数を入れてください>0
3人目の点数を入れてください>a
数値以外が入力されました。
3人目の点数を入れてください>0
4人目の点数を入れてください>-1
1人目の点数:100
2人目の点数:0
3人目の点数:0
平均点:33.3

4.カードシャッフルマシーン

カジノのトランプゲームにあるようなカードシャッフルマシーンを作成したい。

ひとまずはプロトタイプとして1~13までの数値をシャッフルしたり、ソートしたりできるクラスを作成することにした。

以下のプログラムを完成させなさい。

ヒント:Collectionsクラス(標準API)参照すること。

package p15;

import java.util.ArrayList;
import java.util.Collections;

class ShuffleMachine {
    ArrayList<Integer> cards = null;

    public ShuffleMachine() {
        this.cards = new ArrayList<>();
    }
    
    public void shuffle(ArrayList<Integer> list){
        //一行でlistをシャッフルする処理を記述する
    }
    public void sort(ArrayList<Integer> list){
        //一行でlistを昇順に並べる処理を記述する
    }
}

public class Q04{
    
    public static void main(String[] args) {
        ShuffleMachine sm = new ShuffleMachine();
        
        ArrayList<Integer> cards = new ArrayList<>();
        
        for (int i = 1; i <= 13; i++) {
            cards.add(i);
        }
        System.out.println(cards + "\n");
        
        sm.shuffle(cards);
        System.out.println(cards + "\n");
        
        sm.sort(cards);
        System.out.println(cards);
    }
}

<結果の例>

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
[13, 11, 9, 5, 4, 3, 8, 7, 12, 1, 10, 6, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

5.図形の面積で並び替えをする以下のクラスを作成しなさい。

スーパークラス abstract Figure

役割:図形を表現する抽象クラス。 java.lang.Comparable<Figure>インタフェースを実装する。

フィールド
フィールド名アクセス修飾子役割
areaprotecteddouble図形の面積を保持する
メソッド
メソッド名アクセス修飾子戻り値の型役割
compareTo(Figure o)publicintComparableインタフェースの同名メソッドの実装(オーバーライド)

サブクラス1 Rectangle extends Figure

役割:図形の一種である四角形を表現する。

フィールド
フィールド名アクセス修飾子役割
xprivatedouble四角形の横幅を保持する
yprivatedouble四角形の縦幅を保持する
コンストラクタ

役割:全てのフィールドを適切に初期化する。

メソッド
メソッド名アクセス修飾子戻り値の型役割
toString()publicStringRectangle{area=xx.x}という文字列表現を返す。(オーバーライド)

サブクラス2 Circle extends Figure

役割:図形の一種である円を表現する。

フィールド
フィールド名アクセス修飾子役割
rprivatedouble円の半径を保持する
コンストラクタ

役割:全てのフィールドを適切に初期化する。

メソッド
メソッド名アクセス修飾子戻り値の型役割
toString()publicStringCircle{area=xx.x}という文字列表現を返す。(オーバーライド)

<テストクラス>

public class Q05 {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void main(String[] args) {
        Comparable[] fg = new Figure[5];
        fg[0] = new Rectangle(5.0, 10.0);
        fg[1] = new Circle(5.0);
        fg[2] = new Circle(3.0);
        fg[3] = new Circle(9.0);
        fg[4] = new Rectangle(1.5, 1.5);

        List<Comparable> list = Arrays.asList(fg);
        Collections.sort(list);
        for (Comparable figure : list) {
            System.out.println(figure);
        }
    }
}

<結果>

Rectangle{area=2.25}
Circle{area=28.3}
Rectangle{area=50.0}
Circle{area=78.5}
Circle{area=254.5}

Q1:Comparable<Figure>と型パラメータを使用したことにより、どのようなメリットがあったかを答えなさい。

Q2:現在の昇順の並べ替えを降順にするにはどこをどう変えればよいか答えなさい。

Q3:円と長方形以外の図形クラスを作成して配列fgに追加しても動作するようにしなさい。

6.辞書のプロトタイプ

辞書のプロトタイプを作りたい。

以下のようなプログラムがあるとき、melonに対応する日本語を表示させなさい。

package p14;

import java.util.HashMap;
import java.util.Map;

public class Q06 {

    public static void main(String[] args) {
        Map<String, String> dictionary = new HashMap<>();
        dictionary.put("apple", "リンゴ");
        dictionary.put("banana", "バナナ");
        dictionary.put("melon", "メロン");
        dictionary.put("strawberry", "いちご");
        
        //ここに一行でコードを書く

    }
}

7.ArrayListから要素を削除する場合の注意点

以下のプログラムを実行すると例外が発生します。

対処方法をインターネットで調べ、対処しなさい。

import java.util.ArrayList;
import java.util.List;

public class RemoveTest {
	public static void main(String[] args) {
		List<String> nameList = new ArrayList<String>();
		nameList.add("Alice");
		nameList.add("Bob");
		nameList.add("Chris");

		//java.util.ConcurrentModificationExceptionの発生
		for (String str : nameList) {
			if ("Chris".equals(str)) {
				nameList.remove(str);
			}
		}

		System.out.println(nameList);
	}
}

8.オリジナル問題作成

将来の後輩のために良い問題が出来たら教えてください。

以上。

JavaSEの問題集トップページに戻る