我想将此更改为唯一编号,不重复...怎么样? 请给我一些改变这些代码问题的建议...... 我需要20个独特的数字,我需要让它们变得独一无二,并且不会在同一行重复... 这是我老师给我的问题:
import java.lang.*;
// import java.util.Random;
class UniqueRandomIntArray {
// static Random rnGen = new Random();
private static void uriArray(int[] rray) {
int low = 0;
int high = 50;
int rn;
int haveit = 0;
int i = 0;
int j;
while((haveit == 0) && i < rray.length) {
rn = randNum(low, high);
for(j = 0; j <= i; j++) {
if(rn == rray[j]) {
haveit = j;
j = i;
}
}
if(haveit != 0) {
System.out.println("a[" + haveit + "] is " + rn + " already");
haveit = 0;
}
else {
System.out.println("a[" + i + "] is " + rn);
rray[i] = rn;
i++;
}
} // end while
} // end uriArray
private static int randNum(int min, int max) {
int range = (max - min) + 1;
// int randnum = rnGen.nextInt(range) + min;
int randnum = (int) (Math.random() * range) + min;
return randnum;
}
public static void main(String[] args) {
int[] arra = new int[20];
uriArray(arra);
for(int i=0; i<arra.length; i++) {
System.out.print(" | " + arra[i]);
}
System.out.println(" | ");
}
} //class ends
答案 0 :(得分:1)
一种简单的方法是使用Collections.shuffle()
//create list of 50 integers in order 0..49
List<Integer> intlist = new ArrayList<Integer>();
for (int n=0; n<50; n++) intlist.add(n);
//randomize the order
Collections.shuffle(intlist);
//print the list
for (int n : intlist) {
System.out.println(n);
}
答案 1 :(得分:1)
Math.Radnom()不保证唯一性。
你可以在我的脑海里做两件事:
建议一:
建议二:
答案 2 :(得分:0)
解决问题的一个简单方法是使用override func viewDidLoad() {
super.viewDidLoad()
var startScroll = insideScrollView.bounds.width
if cities != nil {
for model in cities.cityModels {
if model.selected {
cityScrollView.addSubview(buildView(startScroll, model: model))
startScroll += cityScrollView.bounds.width
}
}
} else {
var cityModel: CityModel = CityModel(name: "default")
cityModel.selected = false
cities = SearchCityModels.sharedInstance
cities.cityModels.append(cityModel)
}
}
来存储随机数,并在[0,50]范围内向此集合添加新的随机数,直到您有20个:< / p>
Set
<强>用法:强>
public static int[] getRandNums() {
Set<Integer> randNums = new HashSet<Integer>();
Random randomGenerator = new Random();
do {
int randomInt = randomGenerator.nextInt(50); // generate random number between
randNums.add(randomInt); // 0 and 50
if (randNums.size() == 20) break; // exit the loop at 20 numbers
} while(true);
Integer[] resultInt = randNums.toArray(new Integer[0]);
int[] result = new int[resultInt.length];
for (int ctr=0; ctr < resultInt.length; ++ctr) {
result[ctr] = resultInt[ctr].intValue();
}
return result; // return numbers as an array
}
我选择不严格遵守原始代码,因为它太乱了。
答案 3 :(得分:0)
您的代码几乎正常工作,但您可以使用数组中的第一个值重复。
您的问题在于0
使用haveit
检查您是否没有该号码,因此,如果您已在索引0
处拥有该号码,你会认为你没有它。您可以使用-1
代替0
:
变化
int haveit = 0;
到
int haveit = -1;
变化
while ((haveit == 0) && i < rray.length) {
到
while ((haveit == -1) && i < rray.length) {
变化
if(haveit != 0) {
System.out.println("a[" + haveit + "] is " + rn + " already");
haveit = 0;
}
到
if(haveit != -1) {
System.out.println("a[" + haveit + "] is " + rn + " already");
haveit = -1;
}
答案 4 :(得分:0)
创建一个包含每个候选号码的列表。使用Collections.shuffle对其进行随机播放。将前20个元素复制到结果数组。
答案 5 :(得分:0)
默认haveit
-1
而不是0
。因为0是haveit
的可能有效值。