今天逛黑马论坛,看到一个兄弟在论坛发了一个题目,我看好多点击量,却没人回答。。。于是我就想说做来练习练习没想到一弄就是2个小时...现在发现有不少值得记录下来的东西,就在此整理整理!题目是这样的,想要随机产生一堆数,然后让其结果都等于一个固定值!我刚开是看到就想,这没什么难的嘛,定义个Random 再随机一些数加起来,用固定值减去这些数,得出的结果赋值给最后一个数,这样无论怎么产生数都行了。后面发现题目还要求不能是负数。我就想,那就写个循环让他跑,跑出出的数如果大于给出的固定值那就重跑,一直跑到小于固定值,然后用固定值减去总和得出最后一个数就OK了。但是在定义
循环的时候遇到了不少问题!下面一起来看看代码啦。。。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
public class Test {
public static void main(String[] args)throws Exception
{
int y=24;//取6个随机数,有一个数根据取的5个数来做改变
int sum=301;//给定的固定值,也就是所有随机数的和
ArrayList<Integer> al=new ArrayList<Integer>();//定义一个集合装数
int tmep=0;//定义一个临时储存空间
boolean flag1=true;//定义两个标志。。多亏了这样个标志。。。
boolean flag2=true;
Random r=new Random()
while(flag2)//先是外循环,如果没有取到合适的数就一直循环
{
while(flag1)
{
tmep=0;//空间清0,因为会循环回来
al.clear();//数组清零。同理
for(int x=0;x<=y;x++)//循环取数,
{
int num=r.nextInt(50);//取50行了,才50里面随机出数据。不过到100了就很难找。毕竟要26个数
al.add(num);把取出来的数存入数组
}
Iterator<Integer> it=al.iterator();//迭代器
while(it.hasNext())
{
tmep=it.next()+tmep;//遍历所有的数后累加起来
if(tmep<sum)//判断累加后的数是否在固定值范围内
{
flag1=false;//在范围内就让两个标志false让循环结束!!!
flag2=false;
}
else//否则就封闭内循环
{
flag1=true;
flag2=false;
}
}
}
}
int a=sum-m;//计算出最后一个值
al.add(a);//存入数组
for(int s: al)//遍历数组,输出结果!
{
System.out.print("随机数:"+s+"
} }
} 主要是标志哪里弄了不少时间,一不小心就写成死循环了,eclipse down掉几次...- - 还是用cmd不容易挂!大家有兴趣的看看,有更好的点子欢迎补充!我觉得我这个方案不太行,太浪费资源了~~
|