这里是使用 Java 语言编写的 Android 应用程序的完整代码,可用于输入4个数字并解密24点游戏:
`` <?xml version="1.0" encoding="utf-8"?>
`` <LinearLayout
`` xmlns:android="http://schemas.android.com/apk/res/android"
`` android:layout_width="match_parent"
`` android:layout_height="match_parent"
`` android:orientation="vertical"
`` android:padding="16dp">
``
`` <TextView
`` android:layout_width="wrap_content"
`` android:layout_height="wrap_content"
`` android:text="请输入四个数字:"/>
``
`` <EditText
`` android:id="@+id/editText1"
`` android:layout_width="match_parent"
`` android:layout_height="wrap_content"
`` android:inputType="number"/>
``
`` <EditText
`` android:id="@+id/editText2"
`` android:layout_width="match_parent"
`` android:layout_height="wrap_content"
`` android:inputType="number"/>
``
`` <EditText
`` android:id="@+id/editText3"
`` android:layout_width="match_parent"
`` android:layout_height="wrap_content"
`` android:inputType="number"/>
``
`` <EditText
`` android:id="@+id/editText4"
`` android:layout_width="match_parent"
`` android:layout_height="wrap_content"
`` android:inputType="number"/>
``
`` <Button
`` android:id="@+id/button"
`` android:layout_width="match_parent"
`` android:layout_height="wrap_content"
`` android:text="开始解密"
`` android:onClick="startGame"/>
``
`` <TextView
`` android:id="@+id/result"
`` android:layout_width="wrap_content"
`` android:layout_height="wrap_content"
`` android:layout_marginTop="16dp"
`` android:text=""/>
``
`` </LinearLayout>
MainActivity.java
`` import androidx.appcompat.app.AppCompatActivity;
``
`` import android.os.Bundle;
`` import android.view.View;
`` import android.widget.EditText;
`` import android.widget.TextView;
`` import android.widget.Toast;
``
`` import java.util.ArrayList;
`` import java.util.List;
`` import java.util.Random;
``
`` public class MainActivity extends AppCompatActivity {
``
`` private static final int TARGET_NUMBER = 24;
``
`` private List<Integer> nums;
`` private Random random;
`` private TextView resultTextView;
``
`` @Override
`` protected void onCreate(Bundle savedInstanceState) {
`` super.onCreate(savedInstanceState);
`` setContentView(R.layout.activity_main);
``
`` nums = new ArrayList<>();
`` random = new Random();
`` resultTextView = findViewById(R.id.result);
`` }
``
`` public void startGame(View view) {
`` nums.clear();
`` EditText editText1 = findViewById(R.id.editText1);
`` EditText editText2 = findViewById(R.id.editText2);
`` EditText editText3 = findViewById(R.id.editText3);
`` EditText editText4 = findViewById(R.id.editText4);
`` String numStr1 = editText1.getText().toString().trim();
`` String numStr2 = editText2.getText().toString().trim();
`` String numStr3 = editText3.getText().toString().trim();
`` String numStr4 = editText4.getText().toString().trim();
`` if (numStr1.isEmpty() || numStr2.isEmpty() || numStr3.isEmpty() || numStr4.isEmpty()) {
`` Toast.makeText(this, "请输入四个数字", Toast.LENGTH_SHORT).show();
`` return;
`` }
`` try {
`` nums.add(Integer.parseInt(numStr1));
`` nums.add(Integer.parseInt(numStr2));
`` nums.add(Integer.parseInt(numStr3));
`` nums.add(Integer.parseInt(numStr4));
`` } catch (NumberFormatException e) {
`` Toast.makeText(this, "请输入有效的数字", Toast.LENGTH_SHORT).show();
`` return;
`` }
`` List<String> expressions = search(nums);
`` boolean foundSolution = false;
`` for (String expression : expressions) {
`` if (isTargetNumber(expression)) {
`` resultTextView.setText("解密成功!算式为:" + expression + " = " + TARGET_NUMBER);
`` foundSolution = true;
`` break;
`` }
`` }
`` if (!foundSolution) {
`` resultTextView.setText("无法解密!");
`` }
`` }
``
`` private List<Double> calculate(double a, double b) {
`` List<Double> results = new ArrayList<>();
`` results.add(a + b);
`` results.add(a - b);
`` results.add(b - a);
`` results.add(a * b);
`` if (b != 0) {
`` results.add(a / b);
`` }
`` if (a != 0) {
`` results.add(b / a);
`` }
`` return results;
`` }
``
`` private List<String> search(List<Integer> nums) {
`` List<String> expressions = new ArrayList<>();
`` if (nums.size() == 1) {
`` expressions.add(Integer.toString(nums.get(0)));
`` return expressions;
`` }
`` for (int i = 0; i < nums.size(); i++) {
`` for (int j = i + 1; j < nums.size(); j++) {
`` List<Double> results = calculate(nums.get(i), nums.get(j));
`` for (Double result : results) {
`` List<Integer> newNums = new ArrayList<>(nums);
`` newNums.remove(j);
`` newNums.set(i, result.intValue());
`` List<String> subExpressions = search(newNums);
`` for (String subExpression : subExpressions) {
`` expressions.add(nums.get(i) + "+" + nums.get(j) + subExpression);
`` expressions.add(nums.get(i) + "-" + nums.get(j) + subExpression);
`` expressions.add(nums.get(j) + "-" + nums.get(i) + subExpression);
`` expressions.add(nums.get(i) + "*" + nums.get(j) + subExpression);
`` if (nums.get(j) != 0 && result != 0) {
`` expressions.add(nums.get(i) + "/" + nums.get(j) + subExpression);
`` }
`` if (nums.get(i) != 0 && result != 0) {
`` expressions.add(nums.get(j) + "/" + nums.get(i) + subExpression);
`` }
`` }
`` }
`` }
`` }
`` return expressions;
`` }
``
`` private boolean isTargetNumber(String expression) {
`` String[] elements = expression.split("[+\\-*/]");
`` String[] operators = expression.split("\\d+");
`` double result = Double.parseDouble(elements[0]);
`` for (int i = 1; i < elements.length; i++) {
`` switch (operators[i]) {
`` case "+":
`` result += Double.parseDouble(elements[i]);
`` break;
`` case "-":
`` result -= Double.parseDouble(elements[i]);
`` break;
`` case "*":
`` result *= Double.parseDouble(elements[i]);
`` break;
`` case "/":
`` result /= Double.parseDouble(elements[i]);
`` break;
`` }
`` }
`` return Math.abs(result - TARGET_NUMBER) < 1e-6;
`` }
`` }
在这个应用程序中,我们使用了 MainActivity 类,并在其中定义了以下方法:
onCreate():初始化数字列表、随机数生成器和结果显示的TextView。startGame():从四个EditText中获取输入的数字,调用search(nums)方法获取所有可能的算式,遍历这些算式,调用isTargetNumber(expression)方法判断其是否等于目标数字。如果找到了一个等于目标数字的算式,则在resultTextView中显示该算式及其结果,否则输出无法解密。calculate(a, b):计算两个数的加减乘除结果。search(nums):递归搜索所有可能的算式。isTargetNumber(expression):判断一个算式是否等于目标数字。
在布局文件中,我们使用了垂直方向的 LinearLayout,包含四个 EditText 和一个按钮,以及一个用于显示结果的 TextView。当用户点击按钮时,将调用 startGame() 方法进行解密游戏。