オブジェクト指向基本問題。ArrayListの練習。
Q1
ArrayListを使って猫集めゲームを作成せよ。
○Collectによって登場する猫のタイプはA,B,Cいずれかのランダムとする。
○遊ぶと親密度が1増える
詳しくは実行例を参照のこと。
■Catクラス
[static field]
任意
[instance field]
type //A or B or C
name //名前
intimacy //親密度
[constructor]
任意
[method]
任意
■アプリケーションクラス
実行例となるようにする
[実行例]
***Cat Collection*** 1.Collect 2.Play 3.End>2 You do not have anyone to play with. 1.Collect 2.Play 3.End>1 A-type cat appeared! Please name this cat>John John joined! 1.Collect 2.Play 3.End>1 B-type cat appeared! Please name this cat>Paul Paul joined! 1.Collect 2.Play 3.End>1 B-type cat appeared! Please name this cat>George George joined! 1.Collect 2.Play 3.End>2 0・・・John[A](0) 1・・・Paul[B](0) 2・・・George[B](0) Who do you play with?>1 Playing with Paul ... Intimacy is up!! 1.Collect 2.Play 3.End>2 0・・・John[A](0) 1・・・Paul[B](1) 2・・・George[B](0) Who do you play with?>0 Playing with John ... Intimacy is up!! 1.Collect 2.Play 3.End>2 0・・・John[A](1) 1・・・Paul[B](1) 2・・・George[B](0) Who do you play with?>0 Playing with John ... Intimacy is up!! 1.Collect 2.Play 3.End>3 Game over
Catクラス
public class Cat {
public static final char[] TYPES={'A','B','C'};
private char type;
private String name;
private int intimacy;
public Cat(char type,String name){
this.type=type;
this.name=name;
}
public void play(){
System.out.println("Playing with "+this.name+".");
System.out.println("...");
intimacy++;
System.out.println("Intimacy is up!!");
}
public String info(){
return String.format("%s[%c](%d)", this.name,this.type,this.intimacy);
}
public String getName(){
return this.name;
}
public char getType(){
return this.type;
}
public int getIntimacy(){
return this.intimacy;
}
}
アプリケーションクラス
import java.util.*;
public class CatApp{
public static void main(String[] args) {
System.out.println("***Cat Collection***");
Random r = new Random();
Scanner s = new Scanner(System.in);
ArrayList<Cat> list = new ArrayList<>();
while (true) {
System.out.print("1.Collect Cats 2.Play 3.End>");
int select = s.nextInt();
switch (select) {
case 1:
int index = r.nextInt(Cat.TYPES.length);
char type = Cat.TYPES[index];
System.out.println(type + "-type cat appeared!");
System.out.print("Please name this cat>");
String name = s.next();
Cat c = new Cat(type, name);
list.add(c);
System.out.println(name + " joined!");
break;
case 2:
if (list.size() == 0) {
System.out.println("You do not have anyone to play with.");
} else {
for (int i = 0; i < list.size(); i++) {
System.out.printf("%d・・・%s%n", i, list.get(i).info());
}
System.out.print("Who do you play with?>");
int num = s.nextInt();
list.get(num).play();
}
break;
case 3:
System.out.println("Game over");
s.close();
return;
}
}
}
}
Q2(応用)
Playの際の一覧表示をIntimacy降順にせよ。
アプリケーションクラス
import java.util.*;
public class CatApp {
private static ArrayList<Cat> list=new ArrayList<>();
private static final int NAME_ASC=0,TYPE_ASC=1,INTIMACY_DESC=2;
private static int mode=INTIMACY_DESC;
public static void main(String[] args) {
System.out.println("***Cat Collection***");
Random r=new Random();
Scanner s=new Scanner(System.in);
while(true){
System.out.print("1.Collect 2.Play 3.End>");
int select=s.nextInt();
switch(select){
case 1:
int index=r.nextInt(Cat.TYPES.length);
char type=Cat.TYPES[index];
System.out.println(type+"-type cat appeared!");
System.out.print("Please name this cat>");
String name=s.next();
Cat c=new Cat(type,name);
list.add(c);
System.out.println(name+" joined!");
break;
case 2:
if(list.size()==0){
System.out.println("You do not have anyone to play with.");
}else{
sortList(mode);
for(int i=0;i<list.size();i++){
System.out.printf("%d・・・%s%n",i,list.get(i).info());
}
System.out.print("Who do you play with?>");
int num=s.nextInt();
list.get(num).play();
}
break;
case 3:
System.out.println("Game over");
s.close();
return;
}
}
}
private static void sortList(int sortMode){
for(int i=0;i<list.size()-1;i++){
for(int j=i+1;j<list.size();j++){
if(
sortMode== NAME_ASC && list.get(i).getName().compareTo(list.get(j).getName()) >0 ||
sortMode == TYPE_ASC && list.get(i).getType() > list.get(j).getType() ||
sortMode == INTIMACY_DESC && list.get(i).getIntimacy() < list.get(j).getIntimacy()
){
Cat cat=list.get(i);
list.set(i, list.get(j));
list.set(j, cat);
}
}
}
}
}
コメント