所以我试图制作一个程序,产生一个包含20个随机数的数组,没有重复数(给最终用户)。这是我到目前为止的代码
let myURL = NSURL(string: "http://localhost:8888/saveWorkout.php");
let request = NSMutableURLRequest(URL:myURL!);
request.HTTPMethod = "POST";
let postString = "exercise=\(exercise)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if error != nil {
print("error=\(error)")
return
}
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
if let parseJSON = json{
let resultValue = parseJSON["status"] as! String!;
print("result: \(resultValue)")
if(resultValue == "Success"){
print("worked")
}
else{
print("not worked")
}
}
}
catch { print(error) }
}
task.resume();
所以你可以看到我已经尝试过使用Arrays.asList(list).contains(mynumber)但是我仍然在输出中收到重复内容 29 4 4 1 20 三十 20 23 三十 11 6 7 27 14 16 8 4 19 7 15
有什么建议吗?
答案 0 :(得分:4)
使用HashSet跟踪您使用过的数字。
例如
int[] result = new int[20];
HashSet<Integer> used = new HashSet<Integer>();
for (int i = 0; i < 20; i++) {
int add = (int)(Math.random() * 30); //this is the int we are adding
while (used.contains(add)) { //while we have already used the number
add = (int) (Math.random() * 30); //generate a new one because it's already used
}
//by this time, add will be unique
used.add(add);
result[i] = add;
}
这确保您没有重复项,并且比在ArrayList中搜索要快得多,ArrayList每次搜索数字时都会执行一些等于ArrayList大小的操作。当您检查是否包含数字时,HashSet仅执行1次操作。
答案 1 :(得分:1)
您的代码无效的原因是Arrays.asList(int[] list)
返回的大小为ArrayList<int[]>
,而不是ArrayList<Integer>
。因此,当您致电contains
时,它不会检查原始列表中的整数元素,并始终返回false
。
答案 2 :(得分:0)
我建议使用ArrayList,不要使用空if块。 这应该有用。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Main {
static List list = new ArrayList<>(20);
public static void main(String args[])
{
Random rand = new Random();
boolean generating=true;
int counting=0;
while(generating)
{
int testNum= rand.nextInt(30)+1;
if (!list.contains(testNum))
{
list.add(testNum);
counting++;
System.out.println(testNum);
}
if(counting>=20)
{
generating=false;
}
}
}
}
答案 3 :(得分:0)
使用Collections.Shuffle
class Ideone{
public static void main(String[] args) {
Integer[] arr = new Integer[20];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
Collections.shuffle(Arrays.asList(arr));
System.out.println(Arrays.toString(arr));
}}