代码实现目标:
1-33个数放到doubleball.arrred数组中,目的是随机33个数,且不重复地放进去。
代码如下:
import java.util.Arrays;
import java.util.Random;
public class DoubleBall {
int[] arrred = new int[33]; // 红色球
int[] arrblue = new int[16];// 蓝色球
double bonuse; // 奖金
public static void main(String[] args) {
DoubleBall doubleball = new DoubleBall(); // 实例化一个双色球
for (int i = 0; i < doubleball.arrred.length; i++) // 红色双色球未初始化遍历
{
int RandomNumber = new Random().nextInt(33)+1 ;
doubleball.arrred[i] = RandomNumber;
for (int k = 0; k < doubleball.arrred.length ; k++) { //
for (int j = 0; j < i; j++) { // 只要一发现有相同的就随机变一次
while(doubleball.arrred[j] == doubleball.arrred[i]) {
RandomNumber = new Random().nextInt(33)+1 ;
doubleball.arrred[i] = RandomNumber;
}
}
}
// System.out.print(doubleball.arrred[i] + " ");
}
//Arrays.sort(doubleball.arrred);
for (int j : doubleball.arrred) {
System.out.print(j + " ");
}
for (int i = 0; i < doubleball.arrred.length; i++) {
for (int j = i + 1; j < doubleball.arrred.length ; j++) {
if (doubleball.arrred[i] == doubleball.arrred[j]) {
System.out.println("失败了。");
}
}
}
}
}
https://blog.csdn.net/weixin_42345008/article/details/80617724
我想要改错,不用其他正确答案。
如果我的方法实在是没救,改不了,请帮我分析一下详细原因。
for (int k = 0; k < doubleball.arrred.length ; k++) { //
for (int j = 0; j < i; j++) { // 只要一发现有相同的就随机变一次
while(doubleball.arrred[j] == doubleball.arrred[i]) {
RandomNumber = new Random().nextInt(33)+1 ;
doubleball.arrred[i] = RandomNumber;
}
}
}
这里写错了
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
/**
8.【编码】福彩双色球中红球由6个1-33之间的数字组合,且不重复,
编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字 *
*/
public class ColorBall {
public static void main(String[] args) {
Set set=new HashSet<>();
//随机数
Random random=new Random();
while(set.size()<6) {
int numbers=random.nextInt(33)+1;
set.add(numbers);
}
System.out.println(set);
}
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
/**
8.【编码】福彩双色球中红球由6个1-33之间的数字组合,且不重复,
编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字 *
*/
public class ColorBall {
public static void main(String[] args) {
Set<Integer> set=new HashSet<>();
//随机数
Random random=new Random();
while(set.size()<6) {
int numbers=random.nextInt(33)+1;
set.add(numbers);
}
System.out.println(set);
}
RandomNumber = new Random().nextInt(33)+1 ;
doubleball.arrred[i] = RandomNumber;
public class ColorBall {
public static void main(String[] args) {
Set<Integer> set=new HashSet<>();
//随机数
Random random=new Random();
while(set.size()<6) {
int numbers=random.nextInt(33)+1;
set.add(numbers);
}
System.out.println(set);
}
程序逻辑有问题,阅读性也不好,稍稍修改下,你看下:
package test;
import java.util.Arrays;
import java.util.Random;
public class RandomTest {
private int[] arr;
private Random ran = new Random();
private int len;
public RandomTest(int len) {
this.len = len;
arr = new int[len];
}
private boolean exists(int v, int endIdx) {
if (endIdx == 0) {
return false;
}
for(int i = 0; i <=endIdx; i++) {
if (arr[i] == v) {
return true;
}
}
return false;
}
public void print() {
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
public void randFill() {
for (int i = 0; i < len; i++) {
int ranNum = ran.nextInt(len) + 1;
while (exists(ranNum, i)) {
ranNum = ran.nextInt(len) + 1;
}
arr[i] = ranNum;
}
}
public static void main(String[] args) {
RandomTest test = new RandomTest(33);
test.randFill();
test.print();
}
}
存在逻辑错误,建议看下我贴的代码,可以直接运行。
看看你的代码的问题:
for (int k = 0; k < doubleball.arrred.length ; k++) { //loop1
for (int j = 0; j < i; j++) {//loop2
while(doubleball.arrred[j] == doubleball.arrred[i]) {//此时loop3
//假设当前数组元素时【0,1,2,3,3】,i等于4 ,j等于3
//按照while循环会重新生成一个值比如是0,此时数组值为【0,1,2,3,0】,j下标等于4
//此时loop4和loop3都退出,假设此时loop的k已经是最后一个元素下标,也退出了,那生成的值就有问题
RandomNumber = new Random().nextInt(33)+1 ;
doubleball.arrred[i] = RandomNumber;
}
}
}
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
/**
8.【编码】福彩双色球中红球由6个1-33之间的数字组合,且不重复,
编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字 *
*/
public class ColorBall {
public static void main(String[] args) {
Set set=new HashSet<>();
//随机数
Random random=new Random();
while(set.size()<6) {
int numbers=random.nextInt(33)+1;
set.add(numbers);
}
System.out.println(set);
}