お題
簡単なお題でArrayListの練習をしよう。
実行例
お菓子の情報を入力していって、合計を求める。途中お菓子名にeまたはEが入力されるとお菓子登録を抜ける
菓子名>>キャベツ太郎
価格>>30
菓子名>>どんどん焼き
価格>>20
菓子名>>うまい棒
価格>>10
菓子名>>チロルチョコ
価格>>20
菓子名>>e
---お菓子一覧---
菓子名:キャベツ太郎,価格:30円
菓子名:どんどん焼き,価格:20円
菓子名:うまい棒,価格:10円
菓子名:チロルチョコ,価格:20円
合計で80円だよ!
手順
◯新規クラスSnackMain.javaを作成する。内容は以下
public class SnackMain {
public static void main(String[] args) {
}
}
◯SnackMainクラスの下にSnackクラスを作成する。記述は以下
public class SnackMain {
public static void main(String[] args) {
}
}
class Snack{
}
以下はSnackクラスに記述していくこと
◯フィールド変数
String name
int price
◯コンストラクタ
nameとpriceを初期化するコンストラクタ
◯メソッド
void showInfo(){}
インスタンスの情報を表示する。以下はキャベツ太郎の例
菓子名:キャベツ太郎,価格:30円
mainメソッド内の作成
◯Scanner インスタンス scを作成する
◯ArrayListインスタンスsnacksを作成する
◯while(true){}の無限ループを作成する
以下はwhileループの中に記述
◯[菓子名>>]と改行なしに表示
◯キーボードからの入力を変数 name で受け取る
◯if文でもし、nameがeかEのときにループをbreakする処理を書く
◯[価格>>]と改行なしに表示
◯キーボードからの入力を変数priceで受け取る
◯2つの情報をもとにSnackインスタンスを作成し、リスト(snacks)に追加する
以下はwhileループの外に記述
◯[–お菓子一覧–]と出力
◯合計を管理する変数 int sum を 0で初期化
◯拡張for文を使って、リスト(snacks)からインスタンスを一つずつ取り出す
以下は拡張forの中に記述
◯snackインスタンスがshowInfo()を使って情報表示をする
◯sumにsnackの価格を加算する
以下は拡張forの外に記述
◯合計金額を表示する
解答例
import java.util.ArrayList;
import java.util.Scanner;
public class SnackMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in) ;
ArrayList<Snack> snacks = new ArrayList<>();
while(true) {
System.out.print("菓子名>>");
String name= sc.next();
if(name.equalsIgnoreCase("E")) {
break;
}
System.out.print("価格>>");
int price= sc.nextInt();
Snack snack= new Snack(name,price);
snacks.add(snack);
}
System.out.println("--お菓子一覧--");
int sum = 0;
for(Snack s : snacks) {
s.showInfo();
sum += s.price;
}
System.out.printf("合計は%d円だよ%n", sum);
}
}
class Snack{
String name;
int price;
Snack(String name,int price){
this.name=name;
this.price=price;
}
void showInfo() {
System.out.printf("菓子名:%s,価格%d円%n",this.name,this.price);
}
}
以下はSnackクラスで合計金額を管理する例
import java.util.ArrayList;
import java.util.Scanner;
public class SnackMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in) ;
ArrayList<Snack> snacks = new ArrayList<>();
while(true) {
System.out.print("菓子名>>");
String name= sc.next();
if(name.equalsIgnoreCase("E")) {
break;
}
System.out.print("価格>>");
int price= sc.nextInt();
Snack snack= new Snack(name,price);
snacks.add(snack);
}
System.out.println("--お菓子一覧--");
for(Snack s : snacks) {
s.showInfo();
}
System.out.printf("合計は%d円だよ%n", Snack.total);
}
}
class Snack{
static int total;
String name;
int price;
Snack(String name,int price){
this.name=name;
this.price=price;
total+=price;
}
void showInfo() {
System.out.printf("菓子名:%s,価格%d円%n",this.name,this.price);
}
}
コメント