Ich habe es mit Java gelöst! !! Paiza-Übung "Long Table Unagiya" ~ Objektorientiert ~

Einführung

Dieser Artikel wurde von Anfängern in der Programmierung geschrieben. Was ist los, du solltest das mehr tun! !! Wenn Sie irgendwelche Fragen haben, Bitte kommentieren.

Diese Frage ist auch eine Paiza-Übung. Bitte seien Sie versichert, dass es nichts mit dem Rang nach oben oder unten zu tun hat.

スクリーンショット 2018-10-29 22.17.03.png

Ein nicht objektorientierter Typ

Ich habe versucht, es mit Java zu lösen! !! Paiza-Übung "Long Table Unagiya"

Dies ist ein prozeduraler Typ (ist er korrekt?). Als ich diesen Artikel veröffentlichte, hatte ich Code, der objektorientiert geschrieben war Ich habe es auf meine eigene Weise verdaut.

Bitte überprüfen Sie hier die spezifischen Details des Problems.

Objektorientiert denken

Code, der nicht objektorientiert geschrieben wurde

import java.util.*;

public class unagiya {

    public static void main(String[] args) {
        /*
         *Ermitteln Sie die Gesamtzahl der Sitzplätze im Geschäft und die Anzahl der Gruppen, die das Geschäft als String-Typ besuchen, und speichern Sie sie in der Zeile
         *Die in Zeile gespeicherten Daten werden durch Teilen geteilt und in lineArray des String-Arrays gespeichert.
         */
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        String[] lineArray = line.split(" ");
        /*
         *Wandeln Sie die in lineArray gespeicherten Daten um und speichern Sie sie in jeder Variablen
         * 
         * seatNum:Anzahl der Sitze
         * totalGuest:Anzahl der Gruppen, die den Laden besuchen
        */
        int seatNum = castString(lineArray[0]);
        int totalGuest = castString(lineArray[1]);

        /*
         * seats:Erstellen Sie die Anzahl der Plätze mit hashMap
         *Ganzzahl ist die Sitznummer
         *Ob Boolean eine Person ist oder nicht(Wenn das stimmt, können Sie sich setzen,)
         */
        Map<Integer,Boolean> seats = new HashMap<>();
        for(int i = 1; i <= seatNum; i++){
            seats.put(i,true);
        }
        /*
         *isSitCustomer:Überprüfen Sie, ob sich auf dem vom Kunden ausgewählten Sitzplatz Personen befinden
         *Wenn nicht, werfen Sie wahr
         *
         * choiceSeat:Sitznummer, die der Basispunkt für Kunden ist
         *menberNum:Anzahl der Kunden, die gekommen sind
         */

        int choiceSeat = 0;
        int memberNum = 0;

        for(int i = 0; i < totalGuest; i++){
            //Erhält den Eingabewert der Konsole
            //Zuweisen zu memberNum und choiceSeat
            line = scanner.nextLine();
            lineArray = line.split(" ");

            memberNum = castString(lineArray[0]);
            choiceSeat = castString(lineArray[1]);

            //Wenn isSitGuest wahr ist, schreiben Sie die Sitzplatzinformationen des vom Kunden ausgewählten Sitzplatzes und die Anzahl der Personen auf falsch
            if(isSitGuest(seats,choiceSeat,memberNum)){
                for(int j = 0,index = 1 ; j < memberNum; j++){
                    if(seats.size() < choiceSeat + j){
                        seats.put(index, false);
                        index++;
                    } else {
                        seats.put(choiceSeat + j,false);
                    }
                }
            }
        }

        //Überprüfen Sie die falsche Anzahl von Sitzplatzinformationen und ersetzen Sie sie im Ergebnis
        int result = 0;

        for(int i = 1; i <= seats.size(); i++){
            if(seats.get(i).equals(false)){
                result++;
            }
        }
        System.out.println(result);
    }

    //Wandeln Sie eine String-Typ-Nummer in einen Int-Typ um
    public static int castString(String strNum){
        int num = Integer.parseInt(strNum);
        return num;
    }

    /*
     *Karte Sitzplatzinformationen erhalten, von Kunden ausgewählte Sitzplätze, Anzahl der Kunden,
     *Überprüfen Sie, ob die Anzahl der Kunden des vom Kunden ausgewählten Sitzplatzes falsch ist
     * 
     *Bedingungen
     *Gibt false zurück, wenn mehr Gäste als Sitzplätze vorhanden sind
     *Gibt false zurück, wenn die Sitzinformationen nur einen false enthalten
     */
    public static boolean isSitGuest(Map seats, int choiceSeat, int menberNum){
        if(menberNum > seats.size()){
            return false;    
        }

        boolean flag = true;

        for(int i = 0,index = 1; i < menberNum; i++){

            //index:Geben Sie die allererste 1 der Sitzinformationen an
            //Wird beim Zählen von 1 verwendet, wenn die Anzahl der Kunden die Sitzplatznummer überschreitet

            if(seats.size() < choiceSeat + i){
                if(seats.get(index).equals(false)){
                    flag = false;
                    index++;
                } else {
                    index++;
                }
            } else if(seats.get(choiceSeat + i).equals(false)){
                flag = false;
            }

            }
        if(flag){
            return true;
        } else {
            return false;
        }
    }
}

Aber wer hat diesen Code geschrieben ...

Ich habe es nach ungefähr zwei Wochen wieder gelesen, aber es ist schwer zu sehen. Ich mache Plätze mit Map und mache verschiedene Dinge ... (Ich hörte in der Mitte auf zu lesen)

Zu dieser Zeit war ich gut gelaunt und sagte: "Ich konnte einen anständigen Code schreiben."

Ein Wort von Shiracamus, der wie ein Meteor aussah "Weil es eine große Sache ist, lasst uns objektorientiert sein."

Hier ist der Code, den ich mit diesem Wort hinterlassen habe (Wir haben die Erlaubnis von Shiracamus, den Code zu posten)

@ Shiracamus 'Code

import java.util.*;

enum Seat { AVAILABLE, TAKEN };

class LongTable {
    private Seat seat[];

    LongTable(int seatNum) {
        seat = new Seat[seatNum];
        for (int i = 0; i < seatNum; i++) {
            seat[i] = Seat.AVAILABLE;
        }
    }

    boolean sit(int position, int num) {
        for (int i = position; i < position + num; i++) {
            if (seat[i % seat.length] != Seat.AVAILABLE) {
                return false;
            }
        }
        for (int i = position; i < position + num; i++) {
            seat[i % seat.length] = Seat.TAKEN;
        }
        return true;
    }
}

public class Unagiya {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] input = scanner.nextLine().split(" ");
        int seatNum = Integer.parseInt(input[0]);
        int groupNum = Integer.parseInt(input[1]);

        LongTable table = new LongTable(seatNum);

        int sitCount = 0;
        for (int i = 0; i < groupNum; i++){
            input = scanner.nextLine().split(" ");
            int memberNum = Integer.parseInt(input[0]);
            int seatNumber = Integer.parseInt(input[1]);

            if (table.sit(seatNumber, memberNum)) {
                sitCount += memberNum;
            }
        }

        System.out.println(sitCount);
    }
}

Was ist objektorientiert? ?? ??

In dem Moment, als ich diesen Code sah, traf ein elektrischer Schlag meinen Körper.

Wahrscheinlich basierend auf meinem Code neu geschrieben.

Dann verbringe ich mehr Zeit, Ich werde versuchen, in meinem eigenen "objektorientierten" zu schreiben.

Unagiya Aussehensobjekt

Ich fange an, an die Charaktere zu denken.

Betrachten wir es anhand des Flussdiagramms, das ich zuvor geschrieben habe. スクリーンショット 2018-10-27 23.01.49.png

Als allererstes · Langer Tisch

enum Seat {AVAILABLE,UNAVAILABLE}

Von TAKEN Geändert zum Ziel NICHT VERFÜGBAR.

Und der Tisch. Da die Tabelle eine Tabelle ist, gibt es keine Methode (Verhalten). Es existiert einfach dort.


class LongTable {
	Seat[] seats;
	/**
	 *Konstruktor zum Erstellen einer Tabelle
	 *Der Anfangswert ist VERFÜGBAR
	 * @param tableNum
	 */
	LongTable(Integer tableNum) {
		this.seats = new Seat[tableNum];
		for (int i = 0; i < tableNum; i++) {
			seats[i] = Seat.AVAILABLE;
		}
	}
}

Als nächstes kommt der Kunde des Edo-Kindes. Diesmal ist er etwas schnell.

Wenn sich keine Personen auf dem Sitz befinden (isSit) Sitzen (sitzen) Wenn sich eine Person auf dem Sitz befindet (isSit), gehen Sie nach Hause

class Guest {
	/**
	 *Eine Methode, um wahr zu werfen, wenn sich niemand auf dem vom Kunden gewählten Platz befindet
	 * @param guestNum
	 * @param choiceNum
	 * @param table
	 * @return
	 */
	public static Boolean isSit(Integer guestNum, Integer choiceNum, LongTable table) {
		Boolean seatConfirmation = true;
		for (int i = choiceNum; i < choiceNum + guestNum; i++) {
			if (table.seats[i % table.seats.length] == Seat.UNAVAILABLE) {
				seatConfirmation = false;
			}
		}
		return seatConfirmation;
	}
	/**
	 *Eine Methode, bei der ein Kunde sitzt und den Sitz NICHT VERFÜGBAR macht
	 * @param guestNum
	 * @param choiceNum
	 * @param table
	 */
	public static void sitting(Integer guestNum, Integer choiceNum, LongTable table) {
		for (int i = choiceNum; i < choiceNum + guestNum; i++) {
			table.seats[i % table.seats.length] = Seat.UNAVAILABLE; 
		}
	}
}

Dann zählt die Anzahl der Personen, die auf dem Sitz sitzen, ... Vielleicht sind Sie das Personal des Ladens.

class Staff {
	/**
	 *Methode zum Zählen der Anzahl der sitzenden Personen
	 * @param table
	 * @return count(Zählen Sie die Anzahl der NICHT VERFÜGBAREN Sitzplätze)
	 */
	public static Integer sitCount(LongTable table) {
		Integer count = 0;
		for (int i = 0; i < table.seats.length; i++) {
			if (table.seats[i] == Seat.UNAVAILABLE) {
				count++;
			}
		}
		return count;
	}
}

Die Zeichen sind jetzt vollständig. Alles was Sie tun müssen, ist den Fortschritt der Geschichte zu beobachten.

Beschreibung der Hauptmethode

Die Geschichte wird in der Hauptmethode beschrieben.

public class Unagiya {
	public static void main(String[] args) throws Exception{
		//Eingabe: Ruft eine Zeile mit dem Eingabewert von der Konsole ab
		//inpuArray: Speichern Sie die Zahlen in einer Zeile separat in einem Array
		Scanner scanner = new Scanner(System.in);
		String input = scanner.nextLine();
		String[] inputArray = input.split(" ");
		
		//tableNum: Anzahl der Plätze in Unagiya
		//toDayGuest: Wie viele Gruppen von Gästen werden heute kommen
		Integer tableNum = toCastString(inputArray[0]);
		Integer toDayGuest = toCastString(inputArray[1]);
		
		LongTable table = new LongTable(tableNum);
		
		//guestNum: Anzahl der Personen in einer Gruppe
		//choiceNum: Vom Gast gewählter Sitzplatz
		Integer guestNum = 0;
		Integer choiceNum = 0;
		for (int i = 0; i < toDayGuest; i++) {
			
			input = scanner.nextLine();
			inputArray = input.split(" ");
			
			guestNum = toCastString(inputArray[0]);
			choiceNum = toCastString(inputArray[1]);
			
			if (Guest.isSit(guestNum, choiceNum, table)) {
				Guest.sitting(guestNum, choiceNum, table);
			}
		}
		Integer count = Staff.sitCount(table);
		System.out.println(count);
	}
	/**
	 *Methode zum Konvertieren der arabischen Zahl vom Typ String in den Typ Integer
	 * @param strNum
	 * @return num
	 */
	public static Integer toCastString(String strNum) {
		Integer num = Integer.parseInt(strNum);
		return num;
	}
	
}

Ergebnis

スクリーンショット 2018-11-13 0.18.25.png

Ich habe ohne Probleme bestanden.

Referenz

https://www.slideshare.net/masuda220/ss-14263541 Diese Folie ist aber sehr hilfreich Da die Bindung sehr streng ist, mache ich es ein wenig locker ww

Paiza

Meinungen, Eindrücke, Verbesserungen, meine schlechten Worte, suchen

Dies ist der zweite Artikel, obwohl ich Angst habe.

Ich ignoriere wahrscheinlich die Waffe, wie zum Beispiel Qiitas implizites Verständnis.

Wenn Sie das oben Gesagte gelesen haben, würde ich es begrüßen, wenn Sie einige Aufzeichnungen führen könnten. Vielen Dank an alle, die bis zum Ende gelesen haben.

Recommended Posts

Ich habe es mit Java gelöst! !! Paiza-Übung "Long Table Unagiya" ~ Objektorientiert ~
Ich habe es mit Java gelöst! !! Paiza-Übung "Long Table Unagiya"
[Netabare] Aalladen mit langem Tisch (entspricht Paiza Rang B)