有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中,如何将int数组中的一个值更改为另一个值?

我试图使代码,使它不会打印相同的数字两次或更多。我不知道怎样才能做到这一点。我需要更改/添加什么才能使其只打印每个数字中的一个

public class LottoSpill {
public static int ran() {
    int random = (int)(Math.random()*34+1);
    return random;
}

public static int lottoRekke() {
    int[] array = {ran(), ran(), ran(), ran(), ran(), ran(), ran()};
    int ret = array[0];
    for (int i = 0; i < array.length; i++){
        for (int j = 1; j < array.length; j++){
            if(array[i] == array[j]) {
                array[i] = array[i] - array[j] + ran();
                do {
                j++;
                i++;
                } while(i < array.length || j < array.length);
                for (int k = 0; k < array.length; k++) {
                    System.out.print(array[k] + " ");
                }
            }  else if(array[i] != array[j]) {
                do { 
                    j++;
                    } while(j < array.length);
            }
        }
    }
    return ret;
}
public static void main(String[] args) {
    lottoRekke();
}

}

这是代码的结果,因为您可以看到数字17已经打印了两次

25 10 17 20 17 6 27[在0.3秒内完成]


共 (1) 个答案

  1. # 1 楼答案

    试试这个

    • 生成一个从1到34的数字列表。(或者不管你的射程是多少)
    List<Integer> list = new ArrayList<>();
    for (int i = 1; i <= 34; i++) {
      list.add(i);
    }
    
    • 然后给收款人打电话。名单上的shuffle()
    Collections.shuffle(list);
    
    • 然后只取前6个(或多个)数字。它们将是随机和独特的
    for (int i = 0; i < 6; i++) {
       System.out.println(list.get(i));
    }
    

    编辑

    你可以传递开始和结束的数字,也可以省略它们,并在方法中对它们进行硬编码

    public static List<Integer> lottery(int start, int end) {
        List<Integer> nums = new ArrayList<>();
        for (int i = start; i <= end; i++) {
            nums.add(i);
        }
        Collections.shuffle(nums);
        return nums;
    }
    
    // e.g.
    List<Integer> vals = lottery(1,34);