大家好,我真的很感激我的计划有任何帮助。在这个程序中,我必须要求用户输入4个整数,并且我必须输出一个可能的表达式(在众多中)等于24.如果没有这样的解决方案,我必须告诉用户。到目前为止,这就是我所拥有的:
import java.util.Scanner;
public class Game24 {
public static void main(String[] args) {
System.out.println("Enter 4 numbers and hit enter after each number: ");
Scanner input = new Scanner(System.in);
String num1 = input.nextLine();
String num2 = input.nextLine();
String num3 = input.nextLine();
String num4 = input.nextLine();
StringPermutation("", num1 + "+" + num2 + "*" + num3 + "/" + num4 + "(" + ")");
}
public static String StringPermutation(String x, String y) {
double expression = 0;
int count = 0;
if (y.length() <= 1) {
try {
for (int i = 0; i < y.length(); i++) {
String p = y.substring(0, i) + y.substring(i + 1);
expression = Double.parseDouble(StringPermutation(x + y.charAt(i), p));
}
if (y.length() <= 1 && expression == 24) {
do {
count++;
System.out.println(x + y);
} while (count < 1);
}
//if (y.length() <= 1 && expression != 24) {
// System.out.print("No solution");
//}
} catch (Exception e) {}
} else {
for (int i = 0; i < y.length(); i++) {
String p = y.substring(0, i) + y.substring(i + 1);
StringPermutation(x + y.charAt(i), p);
}
}
return "";
}
}
所以我试图做的是我将用户输入的所有排列作为字符串。然后将字符串解析为double并检查所有可能的排列以查看它们是否等于24,如果是,我将表达式输出为字符串。但是,这对我来说并不适用;当我运行程序时,没有任何显示。此外,如果我取消注释评论的部分,它不会显示任何内容。
答案 0 :(得分:0)
以下是一些可能有助于您入门的设计提示:
构建解决方案列表的递归方法的一般形式如下:
List solutions = new ArrayList&lt;&gt;(); test(partialSolution,startingContext);
private void test(解决方案currentSolution,Context currentContext){ if(currentContext.isNotEmpty()){ for(每一步){ test(currentSolution.add(step),currentContext.remove(step)); } } else if(currentSolution.isSuccessful()){ solutions.add(currentSolution); } }
在您的情况下,每个步骤&#39;涉及2个排列维度。第一个维度是尝试所有剩余的操作数。在不创建多个数组的情况下,一种简单的方法是始终使用第一个操作数,然后使用连续的数组成员进行切换。第二个维度是每个运算符(* + - /)。这里最简单的事情就是只进行4次测试调用。更完整的抽象是将运算符放在单独的枚举中,但这对你的情况可能有点过分。
所以这里有一些部分代码可以帮助你入门
class Expressions {
private final Set<String> validExpressions = new TreeSet<>();
public Expressions(int expectedResult, int... operands) {
test("" + operands[0], operands[0], Arrays.copyOfRange(operands, 1, operands.length);
}
private void test(String currentExpression, int currentResult, int... operands) {
if (operands.length > 0) {
...
} else if (currentResult == result) {
validExpressions.add(expression + " = " + result);
}
}
}