Java开发数学问答游戏如何取随机数组指定索引作为switch case值
实现方案
你目前的代码存在两个核心错误:
- switch的判断对象用了
Arrays.toString(array),输出的是整个数组的字符串格式,无法对应单个选项的判断逻辑 - Java语法规定case后必须跟常量,不能直接写数组变量作为匹配值
你的需求可以按以下逻辑实现:你已经完成了正确答案和两个错误选项的打乱存储,接下来只需先获取用户选择的选项序号,再将序号作为switch的判断值,在对应case分支中取出数组对应索引的值和正确结果比对即可。
完整修正代码
import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class MathQuiz { public static void main(String[] args) { Random random=new Random(); int num1= random.nextInt(30); int num2= random.nextInt(30); System.out.println(num1+"+"+num2+"="); int result=num1+num2; System.out.println("请选择正确的答案:"); int sugg1=random.nextInt(100); int sugg2=random.nextInt(100); // 可选优化:避免错误选项和正确答案重复 while (sugg1 == result) sugg1 = random.nextInt(100); while (sugg2 == result || sugg2 == sugg1) sugg2 = random.nextInt(100); int[] array = {sugg1,sugg2,result}; Random rand = new Random(); // 打乱数组 for (int i = 0; i < array.length; i++) { int randomIndexToSwap = rand.nextInt(array.length); int temp = array[randomIndexToSwap]; array[randomIndexToSwap] = array[i]; array[i] = temp; } // 输出三个选项 System.out.println("1. " + array[0]); System.out.println("2. " + array[1]); System.out.println("3. " + array[2]); // 获取用户输入 Scanner scanner = new Scanner(System.in); int userChoice = scanner.nextInt(); // switch判断逻辑 switch (userChoice) { case 1: if (array[0] == result) { System.out.println("回答正确!"); } else { System.out.println("回答错误,正确答案是:" + result); } break; case 2: if (array[1] == result) { System.out.println("回答正确!"); } else { System.out.println("回答错误,正确答案是:" + result); } break; case 3: if (array[2] == result) { System.out.println("回答正确!"); } else { System.out.println("回答错误,正确答案是:" + result); } break; default: System.out.println("请输入1-3之间的有效选项"); } scanner.close(); } }
补充说明
- 数组索引从0开始,所以用户输入的1对应数组的0号索引,以此类推
- 如果不需要多分支做特殊处理,完全可以不用switch,直接写
if (array[userChoice - 1] == result)就能完成判断,代码更简洁 - 上面代码加了错误选项去重的逻辑,避免出现多个正确答案的情况,不需要可以删掉
内容的提问来源于stack exchange,提问作者Ayoub Bentameur
相关产品推荐
相关产品推荐

