You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何根据Scanner用户输入自动选择对应ArrayList取随机值

实现方案

你提到的逻辑完全可行,只需要提前声明一个通用的ArrayList<String>类型的变量承接匹配到的列表,后续直接操作该变量即可。
首先需要修正你现有代码的两个问题:

  • 当前定义的所有餐品列表都是空的,实际使用前需要先添加具体餐品内容,否则随机取值时会触发索引越界异常
  • 现有GetRandomFromList类里的outputMeal方法调用randomList时没有传入列表参数,会编译报错

修改后的Main类代码

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Hi, welcome to Recipe-Randomizer! What kind of meal do you want, breakfast, lunch or maybe dinner?");
        System.out.print("Type one of the give choices now: ");
        String mealType = scanner.nextLine();
        System.out.print("So you want to eat for " + mealType + ". Do you want to eat some sweet or savory " + mealType + "?\nType in one of the given choices: ");
        String flavor = scanner.nextLine();
        System.out.println("A " + flavor + " " + mealType + "? Well, let's see what we have here.\nI am going to pick a random recipe.\nPlease wait...");

        // 初始化餐品列表,可自行补充内容
        ArrayList<String> breakfastSweet = new ArrayList<>();
        breakfastSweet.add("松饼");
        breakfastSweet.add("甜豆浆");
        breakfastSweet.add("红糖发糕");

        ArrayList<String> breakfastSavory = new ArrayList<>();
        breakfastSavory.add("肉包子");
        breakfastSavory.add("咸豆浆");
        breakfastSavory.add("煎饼果子");

        ArrayList<String> lunchSweet = new ArrayList<>();
        lunchSweet.add("糖醋排骨");
        lunchSweet.add("菠萝咕咾肉");

        ArrayList<String> lunchSavory = new ArrayList<>();
        lunchSavory.add("红烧牛肉面");
        lunchSavory.add("回锅肉盖饭");

        ArrayList<String> dinnerSweet = new ArrayList<>();
        dinnerSweet.add("西米露");
        dinnerSweet.add("南瓜粥");

        ArrayList<String> dinnerSavory = new ArrayList<>();
        dinnerSavory.add("小龙虾");
        dinnerSavory.add("烤串");

        // 声明承接匹配结果的列表变量
        ArrayList<String> targetList = null;
        // 按条件匹配对应列表
        if (mealType.equals("breakfast") && flavor.equals("sweet")) {
            targetList = breakfastSweet;
        } else if (mealType.equals("breakfast") && flavor.equals("savory")) {
            targetList = breakfastSavory;
        } else if (mealType.equals("lunch") && flavor.equals("sweet")) {
            targetList = lunchSweet;
        } else if (mealType.equals("lunch") && flavor.equals("savory")) {
            targetList = lunchSavory;
        } else if (mealType.equals("dinner") && flavor.equals("sweet")) {
            targetList = dinnerSweet;
        } else if (mealType.equals("dinner") && flavor.equals("savory")) {
            targetList = dinnerSavory;
        }

        // 异常校验,避免用户输入不符合选项的内容
        if (targetList == null || targetList.isEmpty()) {
            System.out.println("输入的餐品类型或口味不符合要求,未匹配到对应餐品");
            return;
        }

        // 调用工具类输出结果
        GetRandomFromList.outputMeal(targetList);
    }
}

修改后的GetRandomFromList类代码

import java.util.ArrayList;
import java.util.Random;

public class GetRandomFromList {
    private static String randomList(ArrayList<String> list) {
        Random rand = new Random();
        return list.get(rand.nextInt(list.size()));
    }

    public static void outputMeal(ArrayList<String> list){
        System.out.println("What about " + randomList(list) + "?");
    }
}

可选优化方案

如果不想写大量if判断,可以用嵌套Map存储所有餐品,匹配逻辑会更简洁:

// 初始化嵌套Map,外层key为餐品类型,内层key为口味
Map<String, Map<String, ArrayList<String>>> mealMap = new HashMap<>();
// 写入早餐数据
Map<String, ArrayList<String>> breakfastMap = new HashMap<>();
breakfastMap.put("sweet", breakfastSweet);
breakfastMap.put("savory", breakfastSavory);
mealMap.put("breakfast", breakfastMap);
// 按相同逻辑写入午餐、晚餐数据...

// 匹配列表只需一行代码
ArrayList<String> targetList = mealMap.getOrDefault(mealType, Collections.emptyMap()).get(flavor);

内容的提问来源于stack exchange,提问作者Vincenzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:36:03