Cet article est écrit par des débutants en programmation. Quel est le problème, vous devriez le faire plus! !! Si vous avez des questions, Commentez s'il vous plaît.
Cette question est aussi un exercice de paiza. Soyez assuré qu'il n'y a rien à voir avec l'augmentation ou la diminution du rang.
J'ai essayé de le résoudre avec Java! !! Exercice Paiza "Long Table Unagiya"
C'est un type procédural (est-ce correct?). Lorsque j'ai publié cet article, j'avais du code écrit orienté objet, donc Je l'ai digéré à ma manière.
Veuillez vérifier ici pour les détails spécifiques du problème.
Code écrit de manière non orientée objet
import java.util.*;
public class unagiya {
public static void main(String[] args) {
/*
*Obtenez le nombre total de sièges dans le magasin et le nombre de groupes visitant le magasin sous forme de chaîne et enregistrez-le dans la ligne
*Les données stockées en ligne sont divisées par division et stockées dans lineArray du tableau String.
*/
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] lineArray = line.split(" ");
/*
*Cast les données stockées dans lineArray et les stocker dans chaque variable
*
* seatNum:nombre de places
* totalGuest:Nombre de groupes visitant le magasin
*/
int seatNum = castString(lineArray[0]);
int totalGuest = castString(lineArray[1]);
/*
* seats:Créer le nombre de sièges avec hashMap
*Integer est le numéro de siège
*Que Boolean soit une personne ou non(Si c'est vrai, vous pouvez vous asseoir,)
*/
Map<Integer,Boolean> seats = new HashMap<>();
for(int i = 1; i <= seatNum; i++){
seats.put(i,true);
}
/*
*isSitCustomer:Vérifiez s'il y a des personnes dans le siège choisi par le client
*Sinon, lancez vrai
*
* choiceSeat:Numéro de siège qui est le point de base que les clients doivent choisir
*menberNum:Nombre de clients venus
*/
int choiceSeat = 0;
int memberNum = 0;
for(int i = 0; i < totalGuest; i++){
//Reçoit la valeur d'entrée de la console
//Attribuer à memberNum et choiceSeat
line = scanner.nextLine();
lineArray = line.split(" ");
memberNum = castString(lineArray[0]);
choiceSeat = castString(lineArray[1]);
//Si isSitGuest est vrai, réécrivez les informations de siège du siège sélectionné par le client et le nombre de personnes sur false
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);
}
}
}
}
//Vérifiez le faux nombre d'informations sur le siège et remplacez-le dans le résultat
int result = 0;
for(int i = 1; i <= seats.size(); i++){
if(seats.get(i).equals(false)){
result++;
}
}
System.out.println(result);
}
//Convertir un nombre de type String en type int
public static int castString(String strNum){
int num = Integer.parseInt(strNum);
return num;
}
/*
*Plan Recevoir les informations sur les sièges, les sièges sélectionnés par les clients, le nombre de clients,
*Vérifier s'il y a faux pour le nombre de clients du siège sélectionné par le client
*
*conditions
*Renvoie false s'il y a plus d'invités que de sièges
*Renvoie false s'il y a même un faux dans les informations de siège
*/
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:Spécifiez le tout premier 1 des informations sur le siège
//Utilisé lors du comptage à partir de 1 lorsque le nombre de clients dépasse le numéro de siège
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;
}
}
}
Je l'ai relu après environ deux semaines, mais c'est difficile à voir. Je crée des sièges avec Map et fais diverses choses ... (J'ai arrêté de lire au milieu)
À ce moment-là, j'étais de bonne humeur, disant: «J'ai pu écrire un code décent».
Cependant, un mot de shiracamus qui est apparu comme un météore "Parce que c'est un gros problème, soyons orientés objet."
Voici le code que j'ai laissé avec ce mot (Nous avons la permission de shiracamus pour publier le 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);
}
}
Au moment où j'ai vu ce code, un choc électrique a frappé mon corps.
Probablement réécrit en fonction de mon code.
Ensuite je passe plus de temps, J'essaierai d'écrire dans mon propre "orienté objet".
Je commence à penser aux personnages.
Examinons cela en référence à l'organigramme que j'ai écrit plus tôt.
Tout d'abord · Longue table
enum Seat {AVAILABLE,UNAVAILABLE}
De TAKEN Remplacement de la cible NON DISPONIBLE.
Et la table. Puisque la table est une table, il n'y a pas de méthode (comportement). Il existe simplement là-bas.
class LongTable {
Seat[] seats;
/**
*Constructeur pour créer une table
*La valeur initiale est DISPONIBLE
* @param tableNum
*/
LongTable(Integer tableNum) {
this.seats = new Seat[tableNum];
for (int i = 0; i < tableNum; i++) {
seats[i] = Seat.AVAILABLE;
}
}
}
Vient ensuite le client de l'enfant Edo. Cette fois, il est un peu rapide.
S'il n'y a personne sur le siège (isSit) Asseyez-vous (assis) S'il y a une personne sur le siège (isSit), rentrez chez vous
class Guest {
/**
*Une méthode de lancer vrai s'il n'y a personne dans le siège choisi par le client
* @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;
}
/**
*Une méthode dans laquelle un client s'assoit et rend le siège INDISPONIBLE
* @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;
}
}
}
Ensuite, compter le nombre de personnes assises sur le siège, c'est ... Peut-être serez-vous le personnel du magasin.
class Staff {
/**
*Méthode pour compter le nombre de personnes assises
* @param table
* @return count(Comptez le nombre de sièges INDISPONIBLES)
*/
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;
}
}
Les personnages sont maintenant terminés. Tout ce que vous avez à faire est de regarder la progression de l'histoire.
L'histoire est décrite dans la méthode principale.
public class Unagiya {
public static void main(String[] args) throws Exception{
//input: Obtenez une ligne de valeur d'entrée à partir de la console
//inpuArray: stockez les nombres sur une ligne séparément dans un tableau
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String[] inputArray = input.split(" ");
//tableNum: Nombre de sièges en Unagiya
//toDayGuest: Combien de groupes d'invités viendront aujourd'hui
Integer tableNum = toCastString(inputArray[0]);
Integer toDayGuest = toCastString(inputArray[1]);
LongTable table = new LongTable(tableNum);
//guestNum: Nombre de personnes dans un groupe
//choiceNum: Siège choisi par le client
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);
}
/**
*Méthode pour convertir un nombre arabe de type chaîne en type entier
* @param strNum
* @return num
*/
public static Integer toCastString(String strNum) {
Integer num = Integer.parseInt(strNum);
return num;
}
}
Je suis passé sans aucun problème.
https://www.slideshare.net/masuda220/ss-14263541 Cette diapositive est très utile, mais Comme la reliure est très stricte, je le fais un peu lâchement ww
C'est le deuxième article publié, bien que j'en ai peur.
J'ignore probablement l'arme, comme la compréhension implicite de Qiita.
Si vous avez lu ce qui précède, je vous serais reconnaissant de bien vouloir conserver certains registres. Merci à tous ceux qui ont lu jusqu'au bout.