JAVA 如何保证数组里面的值不重复

public class IceCream {
    static String[] flav={
            "Chocolate", "Strawberry",
            "Vanilla Fudge Swirl", "Mint Chip",
            "Mocha Almond Fudge", "Rum Raisin",
            "Praline Cream", "Mud Pie"
    };
    static String[] flavorSet(int n){
        n=Math.abs(n)%(flav.length+1);
        String[] results=new String[n];
        int[] picks=new int[n];
        for (int i=0;i<picks.length;i++)
            picks[i]=-1;
        for (int i=0;i<picks.length;i++){
            retry:
            while(true){
                int t=(int)(Math.random()*flav.length);
                for (int j=0;j<i;j++) {
                    if (picks[j] == t) {
                        continue retry;
                    }
                }
                picks[i]=t;
                results[i]=flav[t];
                break ;
            }
        }
        return results;
    }
    public static void main(String[] args){
        for (int i=0;i<20;i++){
            System.out.println("flavorSet("+i+")=");
            String[] f1=flavorSet(flav.length);
            for (int j=0;j<f1.length;j++)
                System.out.println("\t"+f1[j]);
        }
    }
}

当flavorSet()随机挑选香料的时候,它需要确保以前出现过的一次随机选择不会再次出现,为了达到这个目的,使用了一个while循环,不断做出随机选择,直到发现未在picks数组里出现过的一个元素为止。
如果成功就添加这个元素,并中断循环,再查找下一个。但假设t是一个已经在picks里出现过的数组,就是用标签continue往回跳两级,强制选择一个新t。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现从一个数组中取出不重复的所有数组合,可以使用回溯法来解决。 具体步骤如下: 1. 首先创建一个结果集合,用于保存所有的不重复数组组合。 2. 创建一个辅助函数,该函数用于递归地生成不重复数组组合。 3. 在辅助函数中,设置三个参数:当前选择的结果集,当前选择的位置,以及当前已选择的元素集合。 4. 在辅助函数中,首先检查当前选择的结果集是否已经包含了所有的元素,如果是,则将结果集加入到最终的结果集合中,并返回。 5. 在辅助函数中,从当前选择的位置开始,遍历数组元素,如果该元素没有被选择过,则将其加入到当前选择的结果集中,并继续向下递归。 6. 在递归完成后,需要将当前选择的结果集还原,以便下一次递归时使用。 7. 最后,返回最终的结果集合。 以下是示例代码: ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { int[] nums = {1, 2, 3}; List<List<Integer>> result = new ArrayList<>(); List<Integer> temp = new ArrayList<>(); backtrack(result, temp, nums, 0); System.out.println(result); } private static void backtrack(List<List<Integer>> result, List<Integer> temp, int[] nums, int start) { if (temp.size() == nums.length) { result.add(new ArrayList<>(temp)); return; } for (int i = start; i < nums.length; i++) { if (!temp.contains(nums[i])) { temp.add(nums[i]); backtrack(result, temp, nums, start + 1); temp.remove(temp.size() - 1); } } } } ``` 运行结果为: ``` [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] ``` 以上代码通过回溯法实现了从一个数组中取不重复的所有数组组合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值