package code;
import java.util.Random;
public class Code2 {
public static void main (String[] args) {
Random r = new Random();
int[] s = new int[6];
for (int i = 0; i < 6; i++) {
int red = r.nextInt(33);
//循环条件 遍历数组判断随机数是否在数组中
for (int j = 0; j < s.length; j++) {
if(s[j] == red || red == 0) {
continue;
} else {
s[i] = red;
}
}
}
for (int i : s) {
System.out.println(i);
}
}
}
int red = r.nextInt(33) + 1;
int nextInt(int num) //随机返回一个值在[0,num)的int类型的整数,包括0不包括num
public static int[] randomCommon(int min, int max, int n){
if (n > (max - min + 1) || max < min) {
return null;
}
int[] result = new int[n];
int count = 0;
while(count < n) {
int num = (int) (Math.random() * (max - min)) + min;
boolean flag = true;
for (int j = 0; j < n; j++) {
if(num == result[j]){
flag = false;
break;
}
}
if(flag){
result[count] = num;
count++;
}
}
return result;
}
你的代码需求是什么?代码期望返回的结果是什么?
nextint(33)是产生0-33的随机数,所以会有零,可以用nextint(32)+1产生1-33
代码如下
import java.util.Random;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Playground {
public static void main(String[ ] args) {
List<Integer> list1 = new ArrayList<Integer>();
while(true){
if(list1.size()==6) break;
Random r = new Random();
Integer num = new Integer(r.nextInt(32)+1);
if(!list1.contains(num)) list1.add(num);
}
System.out.println(list1);
}
}
1.把获得的随机数,放到set集合中,因为set集合是不可重复的
2.判断set集合中的元素,当元素个数达到要求后,停止放数字
3.把set集合转成数组
如果只想用数组
1.产生随机数,判断是否在数组中,如果在就跳过这次,如果不在就放入
2.重点在跳过上,continue
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题。
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
测了你的代码,有两个需要注意的地方。
1、int[] s 在初始话的时候就是有值的,默认是 0。在你的red为0或者已存在时,会轮空, s[i] 会获得初始值 0(这个应该就是你一直会有 0 的原因)
2、你的内部for循环应该是为了判断,red的值知否已存在。那么就不应该在内部循环中有 s[i] = red 的赋值,应该是在内部循环标记一个是否已存在:如果不存在,在外层赋值;如果存在,则要重新走一遍逻辑,只到第 i 位赋值成功。
3、这段代码可能有问题,如果你返回的数组长度靠近取值范围。例如:求 0-32之前一共32个整数随机值,如果结果 s 数组长度是30,你的red很容易重复,会循环很多次。如果 s 长度超过 32 则会死循环。
写了个例子,参考下:
package com.jcfintech.esign.business.common; import java.util.ArrayList; import java.util.List; import java.util.Random; public class Test { public static void main(String[] args) { List<Integer> valueList = getIntValueArr(32); int[] s = getNoRepeatIntArr(valueList, 6); for(int i: s){ System.out.print(i + ","); } } private static List<Integer> getIntValueArr(int maxIntValue){ List<Integer> valueList = new ArrayList<>(); for(int i = 1; i <= maxIntValue; i++){ valueList.add(i); } return valueList; } private static int[] getNoRepeatIntArr(List<Integer> valueList, int length){ int valueListLength = valueList.size(); if(length > valueListLength) System.out.println("结果数组长度超过取值范围"); Random random = new Random(); int[] s = new int[length]; for(int i = 0 ; i <length; i++){ int index = random.nextInt(valueListLength); s[i] = valueList.get(index); valueList.remove(index); valueListLength --; } return s; } }