求解这个小程序的错误

问题描述

importjava.util.Random;publicclassRandomDemo01{publicstaticvoidmain(Stringarg[]){Randomran=newRandom();inttemp=ran.nextInt(7)+1;intarr[]=newint[7];for(inti=0;i<7;i++){for(intj=0;j<i;j++){if(arr[j]==temp){temp=ran.nextInt(7)+1;j=0;}}arr[i]=temp;}for(inti=0;i<7;i++){System.out.print(""+arr[i]);}}}程序是想做到7个不一样的数,但是运行的结果会出现重复的:7243617,反复查找没找到问题所在,求高手赐教;下面的程序是一个能运行正确的程序importjava.util.Random;publicclassRandomDemo02{publicstaticvoidmain(Stringargs[]){Randomran=newRandom();intarr[]=newint[7];for(inti=0;i<7;i++){arr[i]=ran.nextInt(7)+1;for(intj=0;j<i;j++){if(arr[i]==arr[j]){i--;break;}}}for(inti=0;i<7;i++){System.out.print(""+arr[i]);}}}

解决方案

解决方案二:
上面这个代码逻辑太混乱了。
解决方案三:
……没了格式,我编辑下去
解决方案四:
那是因为ran.netInt(7)是产生随机数的当然可能重复:而正确的程序中增加了如下代码:for(intj=0;j<i;j++){if(arr[i]==arr[j]){i--;break;}}

这个就是验证数组中是否有重复的数据,如果已经有了本次产生的随机数就不再放入数组中了,i--就是这个道理。
解决方案五:
for(inti=0;i<7;i++){for(intj=0;j<i;j++){if(arr[j]==temp){temp=ran.nextInt(7)+1;j=0;}}arr[i]=temp;}第一个程序也增加了个判断是否有重复的,就是不知道错误在哪里;
解决方案六:
无法编辑有回复的贴子,大家把程序复制放到开发工具里头去看下。解答下。谢谢了哈。
解决方案七:
Random本来就是有可能产生俩个相同的随机数的,所以需要做个逻辑来判断。下面的程序当判断数组中两个数相同的时候,就会让数组的下标回退以便获得不同的随机数。
解决方案八:
if(arr[j]==temp){temp=ran.nextInt(7)+1;j=-1;}每次j=0之后会j++,所以从1开始判定,永远是和arr[0]重复,j=-1以后再自加才是从0开始
解决方案九:
自己判断一下重复的去掉就可以了
解决方案十:
不想有重复存在set里
解决方案十一:
7楼的大大,太谢谢了,成功解决问题,我咋就没想到是j++的问题呢。
解决方案十二:
不重复的随机数还是用Collection比较直观。publicstaticvoidmain(Stringarg[]){Randomran=newRandom();inttemp;List<Integer>list=newArrayList<Integer>();for(inti=0;i<7;i++){do{temp=ran.nextInt(7)+1;}while(list.contains(temp));list.add(temp);}System.out.print(list);}
解决方案十三:
引用7楼futurepk4dike的回复:

if(arr[j]==temp){temp=ran.nextInt(7)+1;j=-1;}每次j=0之后会j++,所以从1开始判定,永远是和arr[0]重复,j=-1以后再自加才是从0开始

正解
解决方案十四:
楼主的思路不对啊
解决方案十五:
你把if(arr[j]==temp){temp=ran.nextInt(7)+1;j=0;}

里面的j=1改为j=-1试下。
解决方案:
在11楼的基础上做了以下修改。publicstaticListgetRandomList(intnumber){Randomran=newRandom();inttemp;List<Integer>list=newArrayList<Integer>();for(inti=0;i<number;i++){do{temp=ran.nextInt(number)+1;}while(list.contains(temp));list.add(temp);}returnlist;}

解决方案:
要获取7个不重复的数,做法应该是用一个列表,把7个数放进去,然后生成随机下标从数组里取数,取出后把该数从列表中删除
解决方案:
就是存在set里面就好了,干嘛整这么麻烦。

时间: 2024-09-20 06:00:11

求解这个小程序的错误的相关文章

c语言-C语言小程序运行错误,求解?

问题描述 C语言小程序运行错误,求解? #include 2 int main() 3 { 4 int i,j; 5 char ch; 6 for(i=1;i<5;i++) 7 { 8 char ='A'+i-1; 9 for(j=1;j<2*i-1;j++) 10 printf("%cn",ch); 11 } 12 return 0; 13 } 14 15 A.c: 在函数'main'中: A.c:8:8: 错误: expected identifier or '(' b

c++-一个C++小程序运行错误,求大神帮忙看看

问题描述 一个C++小程序运行错误,求大神帮忙看看 #include #include "stdafx.h" using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop / class cartp { public: virtual char getcar()=0; }; class BMW

微信小程序下载工具及调试详解_相关技巧

昨天晚些时候微信团队发布了微信小程序开发者工具.微信小程序开发文档和微信小程序设计指南,全新的开发者工具,集成了开发调试.代码编辑及程序发布等功能,帮助开发者简单和高效地开发微信小程序.以下是官方文档,内含小程序开发者工具下载地址及调试指南. 下载地址:开发者工具0.9.092300版 windows 64版:windows 32版:mac版 为了帮助开发者简单和高效地开发微信小程序,我们推出了全新的开发者工具,集成了开发调试.代码编辑及程序发布等功能. devtools 扫码登录 启动工具时,

小程序开发者工具下载及调试指南

昨天晚些时候微信团队发布了微信小程序开发者工具.微信小程序开发文档和微信小程序设计指南,全新的开发者工具,集成了开发调试.代码编辑及程序发布等功能,帮助开发者简单和高效地开发微信小程序.以下是官方文档,内含小程序开发者工具下载地址及调试指南. 下载地址:开发者工具0.9.092300版windows 64版: windows 32版: mac版 为了帮助开发者简单和高效地开发微信小程序,我们推出了全新的开发者工具,集成了开发调试.代码编辑及程序发布等功能. devtools 扫码登录 启动工具时

格式-一个c语言小程序求解?

问题描述 一个c语言小程序求解? #include int main() { double a=0,b=0; scanf("%f%d",&a,&b); printf("%fn%dn",a,b); system("pause"); return 0; } 输出结果如图所示,为什么输入格式以浮点数形式输入不可以正确输出,而整形的可以 解决方案 C语言格式输入函数scanf()详解 解决方案二: 这是其中对 float 和 double

c++-C++,书店的一个小程序,有错误

问题描述 C++,书店的一个小程序,有错误 #include #include using namespace std; class Sales_data { friend std::istream& operator>>(std::istream&, Sales_data&); friend std::ostream& operator<<(std::ostream&, const Sales_data&); friend bool

c-C程序编译错误(小程序)

问题描述 C程序编译错误(小程序) #include #define MAXLINE 100 //most input int compare1(int savewl[]);// array name of save and the first character of the word and the line. void getcl(int savewl[],int next) //get by the character length,save to array { int i,c; fo

图片-Python小程序过程求解

问题描述 Python小程序过程求解 为什么没有 1 3 2 3 3 3 为什么不是 1 1 2 2 3 3 这个过程是怎样的,求解 解决方案 因为循环是先执行完 col循环,再执行row循环的: 当row=1 时, col要执行完 col=1 和col=2 才会执行 row=2 解决方案二: row只能取:1, 2, 3 col只能取:1, 2 但为什么不是 1 1 2 2 解决方案三: range是一个半闭合空间,range(1,3),只会取到1,2, range(1,4),只会取到1,2,

容器“Collection的一个小程序编译时出现的错误,请帮忙解决一下

问题描述 容器"Collection的一个小程序编译时出现的错误,请帮忙解决一下"容器"Collection的一个小程序在windowsXp下的JDK1.5版本/*Collection方法*/importjava.util.*;publicclassTestCollection{publicstaticvoidmain(String[]args){Collectionc=newArrayList();c.add("hello");c.add(newName