import java.util.Random; import java.util.Scanner; public class Test { public static final int MAX = 100;
//根据需求,0的比率要大于等于M,那么1的比例就小于等于1-M public static void main(String[] args) { int[] arr = new int[MAX];
Scanner input = new Scanner(System.in); System.out.println("请输入0所占的比率:"); float percent = input.nextFloat();
int num = MAX - (int)(percent * 100);
//产生num个随机数,对以num为索引的数组元素赋值为1, //不管重复与否,因为这样的话,才能满足需求。如果这num个数 //不重复,那么0的比率正好为M,否则0的比率就大于M Random random = new Random(); int i = 0,n; while(i < num) { n = random.nextInt(MAX); arr[n] = 1; i++; }
import java.util.Arrays; import java.util.Random;public class Test { public static void main(String[] args) { // 定义总的长度和0的最少比个数. final int size = 100; final int minCountOf0 = 60; final int maxCountOf1 = size - minCountOf0; int[] bits = new int[size];
// 产生一个随机数生成0的个数,其值比1的最多个数小. Random rand = new Random(System.currentTimeMillis()); int countOf0 = minCountOf0 + rand.nextInt(maxCountOf1); int countOf1 = 0;
// 初始化数组 for (int i = 0; i < bits.length; ++i) { if (i < countOf0) { bits[i] = 0; } else { bits[i] = 1; ++countOf1; } }
// 输出数组的数据 System.out.println("Count of 0: " + countOf0); System.out.println("Count of 1: " + countOf1); System.out.println(Arrays.toString(bits)); } }
那就再加一个随机数k,是在0-num之间的,这样不就小于了么,大家认为呢
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random;public class Test { public static void main(String[] args) { // 定义总的长度和0的最少比个数. final int size = 100; final int minCountOf0 = 60; final int maxCountOf1 = size - minCountOf0; List<Integer> bits = new ArrayList<Integer>();
// 产生一个随机数生成0的个数,其值比1的最多个数小. Random rand = new Random(System.currentTimeMillis()); int countOf0 = minCountOf0 + rand.nextInt(maxCountOf1); int countOf1 = 0;
// 初始化数组 for (int i = 0; i < size; ++i) { if (i < countOf0) { bits.add(0); } else { bits.add(1); ++countOf1; } }
// 输出数组的数据 System.out.println("Count of 0: " + countOf0); System.out.println("Count of 1: " + countOf1);
int[] arr= new int[100]; Random random = new Random(System.currentTimeMillis()); public void test(double d){ int num = (int)(arr.length*d); for(int i=0;i<num;i++){ arr[random.nextInt(arr.length)] = 1; } } public static void main(String[] a){ Test2 t = new Test2(); t.test(0.4); System.out.println(Arrays.toString(t.arr)); int count = 0; for(int i= 0 ; i < t.arr.length ; i++) { if(t.arr[i]==1) count++; } System.out.println("count:"+count); } }
按你的意思修改一下:package chapter2;import java.util.Arrays; import java.util.Random;public class Test2 {
int[] arr= new int[100]; Random random = new Random(System.currentTimeMillis()); public void test(double d){ int num = (int)(arr.length*(1-d)); for(int i=0;i<num;i++){ arr[random.nextInt(arr.length)] = 1; } } public static void main(String[] a){ Test2 t = new Test2(); t.test(0.6); System.out.println(Arrays.toString(t.arr)); int count = 0; for(int i= 0 ; i < t.arr.length ; i++) { if(t.arr[i]==1) count++; } System.out.println("count:"+count); } }
import java.util.Random;
import java.util.Scanner;
public class Test {
public static final int MAX = 100;
//根据需求,0的比率要大于等于M,那么1的比例就小于等于1-M
public static void main(String[] args) {
int[] arr = new int[MAX];
Scanner input = new Scanner(System.in);
System.out.println("请输入0所占的比率:");
float percent = input.nextFloat();
int num = MAX - (int)(percent * 100);
//产生num个随机数,对以num为索引的数组元素赋值为1,
//不管重复与否,因为这样的话,才能满足需求。如果这num个数
//不重复,那么0的比率正好为M,否则0的比率就大于M
Random random = new Random();
int i = 0,n;
while(i < num) {
n = random.nextInt(MAX);
arr[n] = 1;
i++;
}
//打印出数组元素,每行10个
for(i=0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
if((i + 1) % 10 == 0)
System.out.println();
}
System.out.println();
}
}
n = random.nextInt(MAX);
arr[n] = 1;
i++;
}
这个算法我觉得打放进去的还是固定的1 并不是大于等于某个比例阿
import java.util.Random;public class Test {
public static void main(String[] args) {
// 定义总的长度和0的最少比个数.
final int size = 100;
final int minCountOf0 = 60;
final int maxCountOf1 = size - minCountOf0;
int[] bits = new int[size];
// 产生一个随机数生成0的个数,其值比1的最多个数小.
Random rand = new Random(System.currentTimeMillis());
int countOf0 = minCountOf0 + rand.nextInt(maxCountOf1);
int countOf1 = 0;
// 初始化数组
for (int i = 0; i < bits.length; ++i) {
if (i < countOf0) {
bits[i] = 0;
} else {
bits[i] = 1;
++countOf1;
}
}
// 输出数组的数据
System.out.println("Count of 0: " + countOf0);
System.out.println("Count of 1: " + countOf1);
System.out.println(Arrays.toString(bits));
}
}
import java.util.Collections;
import java.util.List;
import java.util.Random;public class Test {
public static void main(String[] args) {
// 定义总的长度和0的最少比个数.
final int size = 100;
final int minCountOf0 = 60;
final int maxCountOf1 = size - minCountOf0;
List<Integer> bits = new ArrayList<Integer>();
// 产生一个随机数生成0的个数,其值比1的最多个数小.
Random rand = new Random(System.currentTimeMillis());
int countOf0 = minCountOf0 + rand.nextInt(maxCountOf1);
int countOf1 = 0;
// 初始化数组
for (int i = 0; i < size; ++i) {
if (i < countOf0) {
bits.add(0);
} else {
bits.add(1);
++countOf1;
}
}
// 输出数组的数据
System.out.println("Count of 0: " + countOf0);
System.out.println("Count of 1: " + countOf1);
// 混淆列表中的内容
Collections.shuffle(bits);
System.out.println(bits);
}
}
先定义一个数组 全部初始化为0然后输入一个百分比 比如说 60% , 那1-60% = 40%然后 做 40%*数组长度的向下取整次random.nextInt(数组长度),然后获得的int 作为下标填充对应数组元素的值为1,因为nextInt(数组长度)次操作,可能会有重复,所以1的个数最多就是40%*数组长度个
代码如下:package chapter2;import java.util.Arrays;
import java.util.Random;public class Test2 {
int[] arr= new int[100];
Random random = new Random(System.currentTimeMillis());
public void test(double d){
int num = (int)(arr.length*d);
for(int i=0;i<num;i++){
arr[random.nextInt(arr.length)] = 1;
}
}
public static void main(String[] a){
Test2 t = new Test2();
t.test(0.4);
System.out.println(Arrays.toString(t.arr));
int count = 0;
for(int i= 0 ; i < t.arr.length ; i++)
{
if(t.arr[i]==1)
count++;
}
System.out.println("count:"+count);
}
}
import java.util.Random;public class Test2 {
int[] arr= new int[100];
Random random = new Random(System.currentTimeMillis());
public void test(double d){
int num = (int)(arr.length*(1-d));
for(int i=0;i<num;i++){
arr[random.nextInt(arr.length)] = 1;
}
}
public static void main(String[] a){
Test2 t = new Test2();
t.test(0.6);
System.out.println(Arrays.toString(t.arr));
int count = 0;
for(int i= 0 ; i < t.arr.length ; i++)
{
if(t.arr[i]==1)
count++;
}
System.out.println("count:"+count);
}
}
zero_count 表示需要生成0的个数(列如60%, 那一开始就是60);
total_count表示还需要生成几个数(一开始就是100);
在zero_count/total_count 的概率内生产0,否则生成1;每生成一个0, zero_count--;每生成一个数total_count--;
方法2:
给数组n(n%)个赋值0,其他随机赋值0或1,遍历数组,随机交换两个数, 也就是把数组打散。