如何将if-else语句中的每个系统输出存储到一个解决方案字符串中



这个项目是为一款名为Mastermind的游戏设计的。我需要创建一个随机生成的字符串,并将其存储到解决方案中,以便稍后测试解决方案字符串,查看用户是否输入了正确的顺序。我已经成功地创建了要输出的生成器,但我不知道如何将其传递到String解决方案变量。我们不允许使用数组进行此分配。

public void makeSolution() {
int randNum;
Random randGen = new Random();
for(int i = 0; i < NUM_OF_PEGS; i++) {
randNum = randGen.nextInt(6);
if(randNum == 0){
System.out.print("Y");
}
else if(randNum == 1) {
System.out.print("O");
}
else if(randNum == 2) {
System.out.print("R");
}
else if(randNum == 3) {
System.out.print("B");
}
else if(randNum == 4) {
System.out.print("G");
}
else if(randNum == 5) {
System.out.print("P");
}
}
}

您可以使用StringBuilder来附加中间结果,最后您可以打印结果。

import java.util.Random;
public class Main {
public static void main(String[] args) {
final int NUM_OF_PEGS = 5;
Random randGen = new Random();
StringBuilder s = new StringBuilder();
for (int i = 0; i < NUM_OF_PEGS; i++) {
switch (randGen.nextInt(6)) {
case 0:
s.append("Y").append("n");
break;
case 1:
s.append("O").append("n");
break;
case 2:
s.append("R").append("n");
break;
case 3:
s.append("B").append("n");
break;
case 4:
s.append("G").append("n");
break;
case 5:
s.append("P").append("n");
break;
}
}
String solution = s.toString();
System.out.println(solution);
}
}

输出:

O
B
R
O
B

建议:在这种情况下使用switch...case而不是if...else,以更好的方式构建代码。

您应该去掉所有if/else块,只需使用一个循环并在String的帮助下访问符号。这更通用,因为更改符号只需要更改字符串。此外,代码变得更短、可读性更强:

public String makeSolution() {
Random randGen = new Random();
final StringBuilder sb = new StringBuilder();
final String symbols = "YORBGP";
for (int i = 0; i < NUM_OF_PEGS; i++) {
int index = randGen.nextInt(symbols.length());
sb.append(symbols.charAt(index));
}
return sb.toString();
}

在构建解决方案时使用StringBuilder:

StringBuilder builder = new StringBuilder();
public void makeSolution() {
int randNum;
Random randGen = new Random();
for(int i = 0; i < NUM_OF_PEGS; i++) {
randNum = randGen.nextInt(6);
if(randNum == 0){
System.out.print("Y");
builder.append("Y");
}
else if(randNum == 1) {
System.out.print("O");
builder.append("O");
}
else if(randNum == 2) {
System.out.print("R");
builder.append("R");
}
else if(randNum == 3) {
System.out.print("B");
builder.append("B");
}
else if(randNum == 4) {
System.out.print("G");
builder.append("G");
}
else if(randNum == 5) {
System.out.print("P");
builder.append("P");
}
}
}

如果您想将其存储为字符串,只需在生成器上调用toString((方法:

String solution = builder.toString();

希望这能有所帮助。

您可以使用简单的字符串串联来存储"解决方案"字符串。字符串串联可能比StringBuilder慢,但可读性更强。

public void makeSolution() {
int randNum;
Random randGen = new Random();
String solution = "";
for(int i = 0; i < NUM_OF_PEGS; i++) {
randNum = randGen.nextInt(6);
if(randNum == 0){
solution = solution + "Y";
}
else if(randNum == 1) {
solution = solution + "O";
}
else if(randNum == 2) {
solution = solution + "R";
}
else if(randNum == 3) {
solution = solution + "B";
}
else if(randNum == 4) {
solution = solution + "G";
}
else if(randNum == 5) {
solution = solution + "P";
}
}
}

您应该使用StringBuilder构建字符串,然后一旦构建好,您就可以在for循环后验证它,如下所示:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < NUM_OF_PEGS; i++) {
randNum = randGen.nextInt(6);
if (randNum == 0){
sb.append("Y");
} else if (randNum == 1) {
sb.append("O");
} else if (randNum == 2) {
sb.append("R");
} else if (randNum == 3) {
sb.append("B");
} else if (randNum == 4) {
sb.append("G");
} else if (randNum == 5) {
sb.append("P");
}
}
// This is your randomly generated solution
String solution = sb.toString();
validateSolution(solution);

最新更新