Puroguramingu_Bennkyoutyuu
@Puroguramingu_Bennkyoutyuu

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

javaでオブジェクトを使って駐車場のシミュレーターを作りたい!

javaでオブジェクトを使って駐車場のシミュレーターを作りたい!

よくあるコインパーキングとかのシミュレーターを作ってみてほしいです。どんなプログラムでも構いません。java勉強中なので参考にさせていただきます。
誰か教えてください教えて下さい。

一応途中まで作ったやつ

//車クラス
import java.io.*;
class Car
{
	public int num;
	
	public Car(int n, char o)
	{
		num = n;
		System.out.println(ナンバー" + num + "で設定しました")
	}
class main
{
	public static void main(String[] args)
	{
		System.out.println("いらっしゃいませナンバーを入力してください。")
		BufferedReader br =
			new bufferedReader(new InputStreamReader(System.in));
		String str1 = br.readLine();
		int number = Integer.parseInt(str1);
		
		

まだまだよくわからないことだらけです。よろしくお願いします。

0

1Answer

入出庫・満車管理をシミュレートしてみました。
クラス依存関係が片方向になるように interface Vehicle を導入しています。駐車場には車だけでなくバイクなども停められますしね。
参考になりましたら幸いです。

public class ParkingSimulator {

    public static void main(String[] args) {
        Parking parking = new Parking("駅前駐車場", 2);
        Car car1 = new Car("品川33 あ 1234");
        Car car2 = new Car("横浜555 い 5678");
        Car car3 = new Car("多摩345 う 9012");
        car1.park(parking);
        car2.park(parking);
        car3.park(parking);
        car1.exit();
        car3.park(parking);
        car1.exit();
        car2.park(parking);
    }
}

interface Vehicle {
}

class Parking {
    public final String name;
    private ParkingSpace[] spaces;

    Parking(String name, int capacity) {
        this.name = name;
        spaces = new ParkingSpace[capacity];
        for (int i = 0; i < capacity; i++) {
            spaces[i] = new ParkingSpace(i + 1);
        }
    }

    public ParkingSpace searchAvailableSpace() {
        for (var space: spaces) {
            if (space.isAvailable()) {
                return space;
            }
        }
        return null;
    }
}

class ParkingSpace {
    public final int number;
    private Vehicle vehicle;

    ParkingSpace(int number) {
        this.number = number;
    }

    boolean isAvailable() {
        return vehicle == null;
    }

    void park(Vehicle vehicle) throws IllegalStateException {
        if (!isAvailable()) {
            throw new IllegalStateException("not available");
        }
        this.vehicle = vehicle;
    }

    void exit(Vehicle vehicle) throws IllegalStateException {
        if (this.vehicle != vehicle) {
            throw new IllegalStateException("not park");
        }
        this.vehicle = null;
    }
}

class Car implements Vehicle
{
    public final String number;
    private ParkingSpace parkingSpace;

    public Car(final String number)
    {
        this.number = number;
    }

    void park(Parking parking) {
        if (parkingSpace != null) {
            System.out.println("「" + number + "」は既に駐車しています");
            return;
        }
        parkingSpace = parking.searchAvailableSpace();
        if (parkingSpace == null) {
            System.out.println("「" + number + "」は満車で停められませんでした");
            return;
        }
        parkingSpace.park(this);
        System.out.println("「" + number + "」は駐車番号" + parkingSpace.number + "に停めました");
    }

    void exit() {
        if (parkingSpace == null) {
            System.out.println("「" + number + "」は駐車していません");
            return;
        }
        parkingSpace.exit(this);
        parkingSpace = null;
        System.out.println("「" + number + "」は出庫しました");
    }
}
実行結果
「品川33 あ 1234」は駐車番号1に停めました
「横浜555 い 5678」は駐車番号2に停めました
「多摩345 う 9012」は満車で停められませんでした
「品川33 あ 1234」は出庫しました
「多摩345 う 9012」は駐車番号1に停めました
「品川33 あ 1234」は駐車していません
「横浜555 い 5678」は既に駐車しています
3Like

Comments

  1. すごいです!尊敬します。こんな感じです理想は!ありがとうございます!参考にさせていただきます!

Your answer might help someone💌