Während ich ein Janken-Rollenspiel in Java schrieb, war es ziemlich mühsam, jedes Mal "System.out.println" zu schreiben, also versuchte ich herauszufinden, wie ich es einfacher machen konnte.
Ich denke, dass es mit erweiterten Funktionen einfacher sein wird, aber dieses Mal werde ich es aus einer anderen Richtung versuchen.
** Der allgemeine Fluss ist **
--Erstellen Sie eine Methode für die Konsolenausgabe
In der Erklärung werde ich versuchen, mich nur auf eine der drei Klassen zu bewerben.
Code bisher
Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
System.out.println("[Starten Sie Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
System.out.println("["+(cnt+1)+"Runden]");
//Bestimmen Sie, welcher gewonnen hat
Player winner = judgeJanken(player1,player2);
if(winner != null) {
System.out.println("\n"+winner.getName()+"Gewonnen");
winner.notifyResult(true);
}else {
System.out.println("Es ist eine Zeichnung");
}
}
System.out.println("Ende von Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
System.out.print(player1.getWinCount()+"gegen"+player2.getWinCount()+"damit");
if (finalWinner != null) {
System.out.println(finalWinner.getName()+"Ist der Gewinner");
}else {
System.out.println("Es ist eine Zeichnung");
}
}
private Player judgeJanken(Player player1,Player player2) {
Player winner = null;
int player1hand = player1.showHand();
int player2hand = player2.showHand();
printHand(player1hand);
System.out.print("vs.");
printHand(player2hand);
System.out.print("\n");
if((player1hand == Player.stone && player2hand == Player.scissors)||
(player1hand == Player.scissors && player2hand == Player.paper)||
(player1hand == Player.paper && player2hand == Player.stone)) {
winner = player1;
}else if((player1hand == Player.stone && player2hand == Player.paper)||
(player1hand == Player.scissors && player2hand == Player.stone)||
(player1hand == Player.paper && player2hand == Player.scissors)) {
winner = player2;
}
return winner;
}
private Player judgeFinalWinner(Player player1,Player player2) {
Player winner = null;
int player1WinCount = player1.getWinCount();
int player2WinCount = player2.getWinCount();
if(player1WinCount > player2WinCount) {
winner = player1;
}else if(player1WinCount < player2WinCount) {
winner = player2;
}
return winner;
}
private void printHand(int hand) {
switch(hand) {
case Player.stone:
System.out.print("Schmiere");
break;
case Player.scissors:
System.out.print("Choki");
break;
case Player.paper:
System.out.print("Par");
break;
default:
break;
}
}
}
Versuchen Sie, eine Methode wie die folgende hinzuzufügen
//Hier! !! !!
public static void put(String str) {
System.out.println(str);
}
Anstatt "System.out.println" einzugeben, konnte ich dann nur "put" ausführen
Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
put("[Starten Sie Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
put("["+(cnt+1)+"Runden]");
//Bestimmen Sie, welcher gewonnen hat
Player winner = judgeJanken(player1,player2);
if(winner != null) {
put("\n"+winner.getName()+"Gewonnen");
winner.notifyResult(true);
}else {
put("Es ist eine Zeichnung");
}
}
put("Ende von Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
System.out.print(player1.getWinCount()+"gegen"+player2.getWinCount()+"damit");
if (finalWinner != null) {
put(finalWinner.getName()+"Ist der Gewinner");
}else {
put("Es ist eine Zeichnung");
}
}
private Player judgeJanken(Player player1,Player player2) {
Player winner = null;
int player1hand = player1.showHand();
int player2hand = player2.showHand();
printHand(player1hand);
System.out.print("vs.");
printHand(player2hand);
System.out.print("\n");
if((player1hand == Player.stone && player2hand == Player.scissors)||
(player1hand == Player.scissors && player2hand == Player.paper)||
(player1hand == Player.paper && player2hand == Player.stone)) {
winner = player1;
}else if((player1hand == Player.stone && player2hand == Player.paper)||
(player1hand == Player.scissors && player2hand == Player.stone)||
(player1hand == Player.paper && player2hand == Player.scissors)) {
winner = player2;
}
return winner;
}
private Player judgeFinalWinner(Player player1,Player player2) {
Player winner = null;
int player1WinCount = player1.getWinCount();
int player2WinCount = player2.getWinCount();
if(player1WinCount > player2WinCount) {
winner = player1;
}else if(player1WinCount < player2WinCount) {
winner = player2;
}
return winner;
}
private void printHand(int hand) {
switch(hand) {
case Player.stone:
System.out.print("Schmiere");
break;
case Player.scissors:
System.out.print("Choki");
break;
case Player.paper:
System.out.print("Par");
break;
default:
break;
}
}
//Hier! !! !!
public static void put(String str) {
System.out.println(str);
}
}
Es ist eine Methode, daher kann es beim Überqueren von Klassen etwas mühsam sein, aber es ist viel einfacher, lol
In meinem Fall wusste ich es auf dem Weg, also musste ich alles, was ich bisher geschrieben hatte, neu schreiben, um es zu setzen.
Ich habe gerade Linux studiert, also versuchen Sie es mit dem Befehl `` `sed```
~$ sed -e s/Zeichen vor dem Austausch/Ersetzter Charakter/g [Dateiname]
―― “-e” kann vorhanden sein oder nicht --Wenn g nicht eingegeben wird, ersetzen Sie nur das erste Zeichen
Es gibt verschiedene Dinge wie, aber ich werde sie hier weglassen.
Ersetzen Sie es jetzt am Terminal!
tarminal.
~$ sed -e s/System.out.println/put/g Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
put("[Starten Sie Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
put("["+(cnt+1)+"Runden]");
//Bestimmen Sie, welcher gewonnen hat
Player winner = judgeJanken(player1,player2);
if(winner != null) {
put("\n"+winner.getName()+"Gewonnen");
winner.notifyResult(true);
}else {
put("Es ist eine Zeichnung");
}
}
put("Ende von Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
:
:
:
:
public static void put(String str) {
put(str);
}
}
Überprüfen Sie die Datei
tarminal.
~$ cat Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
System.out.println("[Starten Sie Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
System.out.println("["+(cnt+1)+"Runden]");
//Bestimmen Sie, welcher gewonnen hat
Player winner = judgeJanken(player1,player2);
if(winner != null) {
System.out.println("\n"+winner.getName()+"Gewonnen");
winner.notifyResult(true);
}else {
System.out.println("Es ist eine Zeichnung");
}
}
System.out.println("Ende von Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
:
:
:
:
public static void put(String str) {
System.out.println(str);
}
}
Ich dachte, der Austausch wurde hier abgeschlossen, aber als ich ihn mit dem Editor überprüfte, wurde er nicht ersetzt. ..
Als ich es hier nachgeschlagen habe, war der Befehl sed nur in der Vorschau zu sehen und wurde nicht wirklich wiedergegeben.
Ich möchte, dass Sie es tatsächlich reflektieren. Wenn Sie es also nachschlagen Optional `` `-i``` (spiegelt sich direkt in der Datei wider)
Also werde ich es noch einmal versuchen
~$ sed -i -e s/System.out.println/put/g Judge.java
#### **`tarminal.`**
~$ cat Judge.java public class Judge {
public void startJanken(Player player1, Player player2) {
put("[Starten Sie Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
put("["+(cnt+1)+"Runden]");
//Bestimmen Sie, welcher gewonnen hat
Player winner = judgeJanken(player1,player2);
if(winner != null) {
put("\n"+winner.getName()+"Gewonnen");
winner.notifyResult(true);
}else {
put("Es ist eine Zeichnung");
}
}
put("Ende von Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
:
:
:
:
public static void put(String str) {
put(str);
}
}
Es wird fest reflektiert.
Danach wurde auch die Methode ersetzt, daher frage ich mich, ob ich sie beheben sollte.
### Ergebnis
Es wurde einfacher (^ ∀ ^)
Recommended Posts