Je suis actuellement en formation d'ingénieur après avoir été recruté par une certaine entreprise. Le jeu de pièces créé pendant la formation était très médiocre, et je laisserai la version corrigée comme un commandement à moi-même après avoir reçu les avis de l'instructeur.
C'est le code que j'ai écrit en premier.
public Integer execute() {
if(this.possessionCoin == 0) {
return 0;
} else {
System.out.println("You have" + this.possessionCoin + "Coin, Start the game? y / n");
while(true) {
try {
int getCoin = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputChoice = br.readLine();
System.out.println(inputChoice);
if(inputChoice.equals("y")) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
while(true) {
try {
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String inputStr = br2.readLine();
Integer inputBetCoin = Integer.parseInt(inputStr);
if(0 < inputBetCoin && inputBetCoin <= this.possessionCoin && inputBetCoin <= this.maxBetCoin) {
this.possessionCoin -= inputBetCoin;
int sumCardScore = this.getCard();
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
int winCoinCount = doubleUpChanceGame.execute();
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
this.execute();
}
} else {
this.possessionCoin = 0;
break;
}
} else {
break;
}
} catch(IOException | NumberFormatException e) {
}
}
} else if(inputChoice.equals("n")) {
return this.possessionCoin;
} else {
System.out.println("Please enter y or n.");
}
if(getCoin > 0) {
System.out.println("You got " + getCoin + "Coin !!");
} else {
System.out.println("You are losing");
}
PlayLogs playLog = new PlayLogs();
playLog.export();
this.execute();
} catch(IOException | NumberFormatException e) {
}
}
}
}
Même si vous n'êtes pas familier avec la programmation, vous verrez à quel point le code est terrible. C'est un incroyable nid à 10 étages. (Lol) Cependant, il y a deux jours, j'étais calme et j'ai écrit: Peut-être que ceux qui liront cet article appuieront sur le bouton de retour au moment où ils verront ce code. À propos, veuillez noter que l'imbrication est trop profonde et que vous ne pouvez pas le faire vous-même, et que le code n'est pas terminé à certains endroits.
Maintenant, passons le temps dans le passé, puis giflez-vous pour le réparer. Au fait, comme le traitement est trop long, vous devriez séparer la méthode normalement, mais cette fois, je veux me concentrer sur le fait de rendre le nid peu profond, donc je ne parle pas d'extraction de méthode. Veuillez noter cela également.
Premier à partir du haut si déclaration Si la pièce actuelle est 0, elle renvoie 0, sinon c'est le processus suivant.
before
public Integer execute() {
if(this.possessionCoin == 0) {
return 0;
} else {
System.out.println("You have" + this.possessionCoin + "Coin, Start the game? y / n");
Modifiez ceci comme suit.
after
public Integer execute() {
if(this.possessionCoin == 0) {
return 0;
}
System.out.println("You have" + this.possessionCoin + "Coin, Start the game? y / n");
S'il est vrai en fonction du résultat de l'instruction if, il est renvoyé, donc le else ci-dessous n'est pas nécessaire. Cela seul rendait un nid moins profond. Si cela s'applique au processus comme celui-ci et retourne, il n'est pas nécessaire d'écrire autrement. Vous pouvez rendre le code plus facile à lire en l'utilisant activement dans les clauses de retour anticipé et de garde.
before
try {
int getCoin = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputChoice = br.readLine();
System.out.println(inputChoice);
if(inputChoice.equals("y")) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
while(true) {
try {
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String inputStr = br2.readLine();
Integer inputBetCoin = Integer.parseInt(inputStr);
if(0 < inputBetCoin && inputBetCoin <= this.possessionCoin && inputBetCoin <= this.maxBetCoin) {
this.possessionCoin -= inputBetCoin;
int sumCardScore = this.getCard();
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
int winCoinCount = doubleUpChanceGame.execute();
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
this.execute();
}
} else {
this.possessionCoin = 0;
break;
}
} else {
break;
}
} catch(IOException | NumberFormatException e) {
}
}
} else if(inputChoice.equals("n")) {
return this.possessionCoin;
} else {
System.out.println("Please enter y or n.");
}
if(getCoin > 0) {
System.out.println("You got " + getCoin + "Coin !!");
} else {
System.out.println("You are losing");
}
PlayLogs playLog = new PlayLogs();
playLog.export();
this.execute();
} catch(IOException e) {
}
C'est génial (rires) Il y a environ 50 lignes dans l'essai seul. Try se concentre sur les endroits où des exceptions peuvent se produire. Des exceptions peuvent survenir au premier essai
String inputChoice = br.readLine();
Seulement cette phrase. Par conséquent, modifiez-le comme suit.
try {
inputChoice = br.readLine();
} catch(IOException e) {
}
D'autres descriptions seront supprimées. Si vous le faites, une erreur se produira en raison de la portée de la variable, mais il vous suffit de créer la variable à l'extérieur, alors créez-la. Vous pouvez également rendre le nid moins profond en réduisant la description pour essayer.
after
try {
inputChoice = br.readLine();
System.out.println(inputChoice);
} catch(IOException e) {
}
if(inputChoice.equals("y")) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
while(true) {
C'était un peu rafraîchissant de pouvoir émettre une déclaration if de l'essai.
Ensuite, nettoyons l'instruction if qui a été émise.
before
//Au-dessus se trouve la déclaration while.
if(inputChoice.equals("y")) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
while(true) {
try {
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String inputStr = br2.readLine();
Integer inputBetCoin = Integer.parseInt(inputStr);
if(0 < inputBetCoin && inputBetCoin <= this.possessionCoin && inputBetCoin <= this.maxBetCoin) {
this.possessionCoin -= inputBetCoin;
int sumCardScore = this.getCard();
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
int winCoinCount = doubleUpChanceGame.execute();
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
this.execute();
}
} else {
this.possessionCoin = 0;
break;
}
} else {
break;
}
} catch(IOException e) {
}
}
} else if(inputChoice.equals("n")) {
return this.possessionCoin;
} else {
System.out.println("Please enter y or n.");
}
Et en outre, cela supprime l'autre car il peut supprimer l'autre. Au fait, changeons else if en if. (Ici vous aimez)
after
if(inputChoice.equals("y")) {
break;
}
if(inputChoice.equals("n")) {
return this.possessionCoin;
}
System.out.println("Please enter y or n.");
À ce stade, c'est beaucoup plus facile à voir.
if(inputChoice.equals("y")) {
break;
}
if(inputChoice.equals("n")) {
return this.possessionCoin;
}
System.out.println("Please enter y or n.");
while(true) {
int getCoin = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputChoice = "";
try {
inputChoice = br.readLine();
System.out.println(inputChoice);
} catch(IOException e) {
}
if(inputChoice.equals("y")) {
break;
}
if(inputChoice.equals("n")) {
return this.possessionCoin;
}
System.out.println("Please enter y or n.");
if(getCoin > 0) {
System.out.println("You got " + getCoin + "Coin !!");
} else {
System.out.println("You are losing");
}
PlayLogs playLog = new PlayLogs();
playLog.export();
}
//Correction terminée jusqu'à présent
//--------------------------------------------------------------
while(true) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
try {
String inputStr = br.readLine();
Integer inputBetCoin = Integer.parseInt(inputStr);
if(0 < inputBetCoin && inputBetCoin <= this.possessionCoin && inputBetCoin <= this.maxBetCoin) {
this.possessionCoin -= inputBetCoin;
int sumCardScore = this.getCard();
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
int winCoinCount = doubleUpChanceGame.execute();
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
this.execute();
}
} else {
this.possessionCoin = 0;
break;
}
} else {
break;
}
} catch(IOException e) {
}
Après cela, passons à l'essai de l'instruction while ci-dessous.
try {
String inputStr = br.readLine();
Integer inputBetCoin = Integer.parseInt(inputStr);
} catch(IOException | NumberFormatException e) {
System.out.println("You typed incorrect value, please type of correct number");
}
after
while(true) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
try {
String inputStr = br.readLine();
Integer inputBetCoin = Integer.parseInt(inputStr);
} catch(IOException | NumberFormatException e) {
System.out.println("You typed incorrect value, please type of correct number");
}
//Prochain correctif ci-dessous
if(0 < inputBetCoin && inputBetCoin <= this.possessionCoin && inputBetCoin <= this.maxBetCoin) {
this.possessionCoin -= inputBetCoin;
int sumCardScore = this.getCard();
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
int winCoinCount = doubleUpChanceGame.execute();
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
this.execute();
}
} else {
this.possessionCoin = 0;
break;
}
} else {
break;
}
}
Modifiez l'instruction if. Cette condition veut traiter lorsque la valeur d'entrée (montant du pari) est supérieure à 0 et inférieure au montant maximum pouvant être parié, et lorsqu'elle est inférieure à la pièce de possession actuelle, donc inversement, si elle est différente de cette condition, après cela Il semble que vous devriez écrire un processus qui repousse le processus et demande à nouveau une entrée. Utilisez continuer ici.
if(0 < inputBetCoin && inputBetCoin <= this.possessionCoin && inputBetCoin <= this.maxBetCoin) {
En traitement
}
Cette partie
if(inputBetCoin <= 0) {
continue;
}
if(inputBetCoin > this.possessionCoin) {
continue;
}
if(inputBetCoin > this.maxBetCoin) {
continue;
}
En traitement
Je l'ai réécrit comme ça. En faisant cela, si la valeur d'entrée est égale ou inférieure à 0, elle sera refaite, si elle est plus grande que la pièce possédée, elle sera refaite, et si elle est supérieure au montant maximum de la mise, elle sera refaite. Je pense que c'est plus simple et plus facile à lire.
Vous pouvez les connecter avec &&, mais il est plus facile pour l'œil humain de lire verticalement qu'horizontalement, et il est préférable d'écrire une condition à la fois afin de ne pas avoir à vous soucier de la condition précédente.
Ensuite, puisque l'instruction if est écrite dans l'instruction if, modifiez-la ici.
before
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
int winCoinCount = doubleUpChanceGame.execute();
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
this.execute();
}
} else {
break;
}
Tout d'abord, affichez l'instruction if à l'intérieur.
after
int winCoinCoint = 0;
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
winCoinCount = doubleUpChanceGame.execute();
} else {
break;
}
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
break;
}
Si vous définissez break lorsque la première instruction if devient else, le comportement sera le même qu'auparavant. Une erreur se produit dans la portée de la variable, donc corrigez-la.
Puisqu'il s'agit d'un retour anticipé avec le si familier, supprimez l'autre en bas.
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
winCoinCount = doubleUpChanceGame.execute();
} else {
break;
}
if(winCoinCount == 0) {
return 0;
}
System.out.println("You got " + winCoinCount + "Coin !!");
break;
Il y a une autre partie de l'instruction if ci-dessus qui pourrait être corrigée. Cela signifie que seule la pause est effectuée lorsque le processus passe à else.
before
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
winCoinCount = doubleUpChanceGame.execute();
} else {
break;
}
La méthode appelée this.judgeCard est une méthode qui renvoie un booléen. Désormais, lorsque false est renvoyé, break quittera le processus, vous pouvez donc également écrire ceci.
after
if(!this.judgeCard(sumCardScore)) {
break;
}
getFromCardPickCoin += (inputBetCoin * 2);
System.out.println("You Win! Get" + (getFromCardPickCoin) + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame((getFromCardPickCoin), this.deckSetCount);
getFromDoubleUpCoin = doubleUpChanceGame.execute();
En faisant cela, quand il devient faux, vous pouvez interrompre et quitter le processus, sinon vous pouvez continuer le processus. Vous pouvez à nouveau supprimer autre chose. Cependant, le jugement de retourner le booléen avec! Peut être difficile à comprendre, il semble donc préférable de concevoir un nom de variable ou de l'utiliser au cas par cas.
Avant correction
before
public Integer execute() {
if(this.possessionCoin == 0) {
return 0;
} else {
System.out.println("You have" + this.possessionCoin + "Coin, Start the game? y / n");
while(true) {
try {
int getCoin = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputChoice = br.readLine();
System.out.println(inputChoice);
if(inputChoice.equals("y")) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
while(true) {
try {
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
String inputStr = br2.readLine();
Integer inputBetCoin = Integer.parseInt(inputStr);
if(0 < inputBetCoin && inputBetCoin <= this.possessionCoin && inputBetCoin <= this.maxBetCoin) {
this.possessionCoin -= inputBetCoin;
int sumCardScore = this.getCard();
if(this.judgeCard(sumCardScore)) {
getCoin = inputBetCoin * 2;
System.out.println("You Win! Get" + getCoin + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame(getCoin, this.deckSetCount);
int winCoinCount = doubleUpChanceGame.execute();
if(winCoinCount == 0) {
return 0;
} else {
System.out.println("You got " + winCoinCount + "Coin !!");
this.execute();
}
} else {
this.possessionCoin = 0;
break;
}
} else {
break;
}
} catch(IOException | NumberFormatException e) {
}
}
} else if(inputChoice.equals("n")) {
return this.possessionCoin;
} else {
System.out.println("Please enter y or n.");
}
if(getCoin > 0) {
System.out.println("You got " + getCoin + "Coin !!");
} else {
System.out.println("You are losing");
}
PlayLogs playLog = new PlayLogs();
playLog.export();
this.execute();
} catch(IOException | NumberFormatException e) {
}
}
}
}
modifié
after
public Integer execute() {
if(this.possessionCoin == 0) {
return 0;
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
System.out.println("You have" + this.possessionCoin + "Coin, Start the game? y / n");
String inputChoice = "";
try {
inputChoice = br.readLine();
} catch(IOException | NumberFormatException e) {
System.out.println("You typed incorrect value, please type of correct number");
}
if(inputChoice.equals("n")) {
return this.possessionCoin;
}
if(inputChoice.equals("y")) {
break;
}
System.out.println("Please enter y or n.");
}
int inputBetCoin = 0;
int getFromCardPickCoin = 0;
int getFromDoubleUpCoin = 0;
while(true) {
System.out.println("Please bet Coin 1 ~ " + this.maxBetCoin);
try {
String inputStr = br.readLine();
inputBetCoin = Integer.parseInt(inputStr);
} catch(IOException | NumberFormatException e) {
System.out.println("You typed incorrect value, please type of correct number");
}
if(inputBetCoin <= 0) {
continue;
}
if(inputBetCoin > this.maxBetCoin) {
continue;
}
if(inputBetCoin > this.possessionCoin) {
continue;
}
this.possessionCoin -= inputBetCoin;
int sumCardScore = this.getCard();
if(!this.judgeCard(sumCardScore)) {
break;
}
getFromCardPickCoin += (inputBetCoin * 2);
System.out.println("You Win! Get" + (getFromCardPickCoin) + "Coin!");
DoubleUpChanceGame doubleUpChanceGame = new DoubleUpChanceGame((getFromCardPickCoin), this.deckSetCount);
getFromDoubleUpCoin = doubleUpChanceGame.execute();
if(getFromDoubleUpCoin == 0) {
System.out.println("You are losing");
return this.possessionCoin;
}
break;
}
if(getFromDoubleUpCoin > 0) {
System.out.println("You got " + getFromDoubleUpCoin + "Coin !!");
this.possessionCoin += getFromDoubleUpCoin + inputBetCoin;
} else {
System.out.println("You are losing");
}
PlayLogs playLog = new PlayLogs();
playLog.export();
return this.execute();
}
J'ai pu réduire la nidification à 3 niveaux. Cela peut être difficile à lire en raison du grand nombre de lignes, mais je pense que c'est encore beaucoup plus facile à lire qu'avant la correction. Je pense que ce sera plus facile à lire si vous isolez la méthode d'ici. (Avant la modification, l'application est incomplète et après la modification est la version terminée de l'application, donc la logique et les noms de variable ont changé à certains endroits, mais cette fois, l'objectif principal n'était pas de créer l'application mais de rendre le nid peu profond, alors veuillez vous y référer. S'il vous plaît, pardonnez-moi.)
J'ai senti qu'il était absolument nécessaire d'avoir l'idée qu'il y avait une autre voie lorsque la nidification était profonde. Pour le moment, je vais bien parce que je me suis sauté il y a deux jours (rires) Si vous pensez qu'il vaut mieux faire cela pour le rendre plus facile à voir, ou si vous devez faire attention à ces points, je vous serais reconnaissant si vous pouviez commenter!
Recommended Posts