While语句的循环解决方案?

时间:2014-10-08 22:42:00

标签: java random while-loop numbers

我有一个while语句,它产生一个介于15和32之间,以及212和229之间的数字。

import java.util.Scanner;
import java.util.Random;
public class Test
{
public static void main(String[] args)

{
    int randNum = 0;
    Random randNumList = new Random();

    while( !(randNum>=15 && randNum<=32)&& !(randNum>=212 && randNum<=229))
     {
        randNum = randNumList.nextInt(251);
     }
     System.out.println(randNum);

我可以使用什么类型的循环来生成这些&#34; randNum&#34;生成的给定数量(例如10个)?例如,如果while语句产生数字24,那么我怎样才能在15/32和212/229之间产生10个数字呢?

3 个答案:

答案 0 :(得分:0)

虽然你创建一个随机的方式可能不是最有效的 - 对你的代码的最小侵入性改变就是简单地在for循环中包装你的...你可以将结果添加到一个数组,或者列出以后访问它们。

Random randNumList = new Random(); //do this only once - no need to re-create it you can re-use it

for(int i=0; i<asManyAsYouWantPlusOne; i++){

       randNum = 0; //important! reset here or you will end up with all the same random numbers ...

       while( !(randNum>=15 && randNum<=32)&& !(randNum>=212 && randNum<=229))
       {
         randNum = randNumList.nextInt(251);
       }
      //add to list, or array here ...
       System.out.println(randNum);
     }

答案 1 :(得分:0)

如果我正确理解你提出的建议,你可以简单地在它周围添加一个for循环,如:

for(int i = 0; i < 10; i++)
{
    while( !(randNum>=15 && randNum<=32)&& !(randNum>=212 && randNum<=229))
    {
        randNum = randNumList.nextInt(251);
    }
    System.out.println(randNum);
}

但是,你循环无效,因为它会不必要地生成几个数字。您可以简单地询问较小范围内的数字(15到32之间有(32-15 + 1 =)18个数字,212到229之间还有其他(229-212 + 1 =)18个数字 - 总共36个数字,所以),并调整它,如:

randNum = randNumList.nextInt(36)+15; // this creates numbers between 15 and 50
if(randNum > 32) randNum += 179; // this transforms the numbers between 33 and 50
                                 // in numbers between 212 and 229

希望有所帮助。

答案 2 :(得分:0)

根据您对Birgit Martinelle的回应,您的实际目标似乎是保证指定范围内的一组唯一值。 (如果是这样,你应该在你的问题中而不是在评论中这么说,因为这是一个完全不同的问题。)

一个不错的解决方案是对集合进行混洗并迭代结果以选择一个子集:

ArrayList<Integer> al = new ArrayList<Integer>();
for(int i = 15; i < 33; ++i) {
   al.add(i);
}
for(int i = 212; i < 230; ++i) {
   al.add(i);
}

// Repeat (loop over) the following lines as many times as you need subsets.
Collections.shuffle(al);
for(int i = 0; i < 10; i++) {
   System.out.println(al.get(i));
}

你目前的拒绝计划非常低效 - 你扔掉了216/251(超过85%)的尝试。

相关问题