1.名簿作成
チームメンバーの名簿を作成するプログラムである。
コンソールから名前を入力させ、"END"を入力したら、今まで入力した名前が表示されるようにしなさい。
なお、名前はArrayListで作った可変長配列に格納すること。
なぜなら、チームメンバー数は不定であるから。
ヒント:Scannerクラスを使うこと。
(出力イメージ)
1人目の名前を入れてください>yamada |
2.キーワード記憶アプリ
Javaの英字キーワードを暗記するためのアプリケーションのプロトタイプを作成したい。
キーボードから入力されたキーワードを"END"が入力されるまでArrayListに格納したうえで表示するプログラムを作成しなさい。ただし、キーワードのうち5文字未満のものは出題されない予定なので表示しないこと。
なお、"END"は大文字小文字を問わないこととする。つまり"END"、"End"、"end"でも入力を終了させる。
Javaのキーワードを入れてください:new |
3.テストの平均点
チームメンバーの確認テストの平均点を計算するプログラムを作成したい。
コンソールから点数を入力させ、-1を入力したら、今まで入力した数値と平均(小数第2位四捨五入1位表示)が表示されるようにしなさい。
なお、この時の数値はArrayListで作った可変長配列に格納すること。
また、数値以外が入力された場合に例外処理を使って対応すること。
ヒント1:ユーザーのキーボード入力を受け付けるにはScannerクラスのnextLineメソッドを使ってください。戻り値はStringなので数値として解釈するメソッドを使ってください。
ヒント2:以下のように書くと小数第2位四捨五入1位表示できます。
System.out.println(String.format("%.1f", 3.1415));
(出力例)
1人目の点数を入れてください>100 |
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>インタフェースを実装する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
area | protected | double | 図形の面積を保持する |
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
compareTo(Figure o) | public | int | Comparableインタフェースの同名メソッドの実装(オーバーライド) |
サブクラス1 Rectangle extends Figure
役割:図形の一種である四角形を表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
x | private | double | 四角形の横幅を保持する |
y | private | double | 四角形の縦幅を保持する |
コンストラクタ
役割:全てのフィールドを適切に初期化する。
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
toString() | public | String | Rectangle{area=xx.x}という文字列表現を返す。(オーバーライド) |
サブクラス2 Circle extends Figure
役割:図形の一種である円を表現する。
フィールド
フィールド名 | アクセス修飾子 | 型 | 役割 |
r | private | double | 円の半径を保持する |
コンストラクタ
役割:全てのフィールドを適切に初期化する。
メソッド
メソッド名 | アクセス修飾子 | 戻り値の型 | 役割 |
toString() | public | String | Circle{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.オリジナル問題作成
将来の後輩のために良い問題が出来たら教えてください。
以上。