将Java随机选择代码重构为Android版本遇问题,需实现EditText读内容存ArrayList
Android版本随机选择工具实现方案
嘿,我来帮你搞定这个Android版本的随机选择工具!先提一句你贴的原Java代码有个小细节问题——new ArrayList<String>后面少了括号,正确写法是new ArrayList<String>(),不过咱们直接聚焦Android版本的实现哈。
第一步:编写布局文件(res/layout/activity_main.xml)
我们需要一个输入框让用户输入选项,一个按钮负责添加选项,一个文本框展示已添加的所有选项,还有触发随机选择的按钮,以及显示最终结果的文本框:
<?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"> <!-- 输入选项的EditText --> <EditText android:id="@+id/et_option" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入要添加的选项" /> <!-- 添加选项按钮 --> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="添加选项" android:layout_marginTop="8dp" /> <!-- 显示已添加的选项 --> <TextView android:id="@+id/tv_options" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="已添加的选项:" android:textSize="16sp" /> <!-- 随机选择按钮 --> <Button android:id="@+id/btn_pick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="随机选择" android:layout_marginTop="16dp" /> <!-- 显示选择结果 --> <TextView android:id="@+id/tv_result" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:textSize="20sp" android:textStyle="bold" /> </LinearLayout>
第二步:编写Activity逻辑(MainActivity.java)
这里实现从EditText读取内容、添加到ArrayList,以及随机选择的核心功能,同时处理输入为空、列表为空等边界情况:
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; import java.util.List; import java.util.Random; public class MainActivity extends AppCompatActivity { private EditText etOption; private TextView tvOptions; private TextView tvResult; private List<String> optionList = new ArrayList<>(); private Random randomGenerator = new Random(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化所有控件 etOption = findViewById(R.id.et_option); tvOptions = findViewById(R.id.tv_options); tvResult = findViewById(R.id.tv_result); Button btnAdd = findViewById(R.id.btn_add); Button btnPick = findViewById(R.id.btn_pick); // 添加选项按钮的点击事件 btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String option = etOption.getText().toString().trim(); if (!option.isEmpty()) { optionList.add(option); // 更新已添加选项的显示内容 updateOptionsDisplay(); // 清空输入框,方便用户继续输入 etOption.setText(""); } else { Toast.makeText(MainActivity.this, "请输入有效的选项哦", Toast.LENGTH_SHORT).show(); } } }); // 随机选择按钮的点击事件 btnPick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!optionList.isEmpty()) { int randomIndex = randomGenerator.nextInt(optionList.size()); String selectedOption = optionList.get(randomIndex); tvResult.setText("随机选中:" + selectedOption); } else { Toast.makeText(MainActivity.this, "还没有添加任何选项呢", Toast.LENGTH_SHORT).show(); } } }); } // 辅助方法:更新已添加选项的展示文本 private void updateOptionsDisplay() { StringBuilder sb = new StringBuilder("已添加的选项:\n"); for (int i = 0; i < optionList.size(); i++) { sb.append(i + 1).append(". ").append(optionList.get(i)).append("\n"); } tvOptions.setText(sb.toString()); } }
关键细节说明
- 输入校验:添加选项时先trim掉前后空格,避免空字符串或纯空格的无效选项被加入,同时用Toast给用户明确提示。
- 异常预防:随机选择前先判断列表是否为空,防止出现
IndexOutOfBoundsException,同样用Toast提示用户补充选项。 - 显示优化:用
StringBuilder拼接选项列表,让用户能清晰看到所有已添加的内容。 - 代码适配:Android里用非静态的成员变量存储选项列表更合适,因为Activity是实例化使用的,不像控制台程序依赖静态变量。
把这些代码放到你的Android项目里,就能直接运行测试啦~
内容的提问来源于stack exchange,提问作者Serkan Tarakcı
相关产品推荐
相关产品推荐

