需要帮助整理嵌套的for循环

时间:2016-02-13 22:06:32

标签: java

我正在尝试为我的英语课做一个琐事游戏,它将随机选择一个问题,但不会选择相同的两次。我目前有一个原型设置,但我无法弄清楚出现了什么问题阻止它实际打印问题 这是庞然大物:

import java.io.*;
import java.util.*;
public class qpicker
{
public static void main (String args[])
{
    int qs = 0;
    boolean q1checker, q2checker, q3checker, q4checker, q5checker, 
q6checker, q7checker, q8checker, q9checker, q10checker, q11checker,  
q12checker,q13checker, q14checker, q15checker, q16checker, q17checker,
q18checker, q19checker, q20checker; //this disaster is where i declared my
    q1checker = false;              //booleans
    q2checker = false;
    q3checker = false;
    q4checker = false;
    q5checker = false;
    q6checker = false;
    q7checker = false;
    q8checker = false;
    q9checker = false;
    q10checker = false;
    q1checker = false;
    q12checker = false;
    q13checker = false;
    q14checker = false;
    q15checker = false;
    q16checker = false;
    q17checker = false;
    q18checker = false;
    q19checker = false;
    q20checker = false; //here i tried to set all booleans to false, 
                         //thinking maybe that was the issue
    do
    {

        qs++;
        Random random = new Random();
        double rng = random.nextDouble();
        double selecter = rng * 10;//makes the random number easier to read
        if(rng <=.5)
        {
            if(q1checker = false)
            {
                System.out.println("Put first q in here");
                q1checker = true;
                break;
            }

        }
        System.out.print("cheese");//code progress tracker 
        if(rng <=1 && rng >.5)//this is where the question would be pulled        
        {
            if(q2checker = false)//this ensures questions aren't repeated
            {
                System.out.println("Put second q in here");//display quest.
                q2checker = true;
                break;
            }

        }
        System.out.print("e");
        if(rng <=1.5 && rng > 1)//question picked
        {
            if(q3checker = false)//ensures questions aren't repeated
            {
                System.out.println("Put third q in here");//display quest.
                q3checker = true;
                break;
            }

        }
        System.out.print("y");
        if(rng <=2 && rng > 1.5 )
        {
            if(q4checker = false)
            {
                System.out.println("Put fourth q in here");
                q4checker = true;
                break;
            }
            else if (q4checker = true)
            {continue;}
            System.out.print(" ");
        }if(rng <=2.5 && rng > 2)
        {
            if(q5checker = false)
            {
                System.out.println("Put fifth q in here");
                q5checker = true;
                break;
            }

        }
        System.out.print("good");
        if(rng <=3 && rng > 2.5)
        {
            if(q6checker = false)
            {
                System.out.println("Put sixth q in here");
                q6checker = true;
                break;
            }

        }
        System.out.print("ness");//spells out "cheesey goodness" 20 times
    }while (qs < 20);//ensures all questions are printed (in final product)
}
}

3 个答案:

答案 0 :(得分:1)

static void shuffleArray(string[] ar)
  {
    //set the seed for the random variable
    Random rnd = ThreadLocalRandom.current();
    //go from the last element to the first one.
    for (int i = ar.size()- 1; i > 0; i--)
    {
      //get a random number till the current position and simply swap elements
      int index = rnd.nextInt(i + 1);
      // Simple swap
      int a = ar[index];
      ar[index] = ar[i];
      ar[i] = a;
    }
  }

这样你可以随机播放整个数组并以随机顺序获取值,但完全没有重复。每个元素都会改变位置,这样无论你选择什么元素(位置),你都可以从一个随机位置获得一个国家。你可以返回整个矢量,位置是随机的。

您可以尝试使用此方法,对数组进行混洗并以随机顺序返回整个数组,因为它混合了元素。

答案 1 :(得分:1)

从我看到你试图允许他们选择问题直到他们筋疲力尽,随机选择。您可以使用ArrayList轻松完成此操作,您可以从列表中随机选择一个索引来提取问题,从列表中删除问题,因此无法再从中进行选择。请注意,从列表中删除并使用它后,列表将缩小1

String[] questionArray = ["Question 1","Question 2","Question 3","Question 4","Question 5"];
ArrayList<String> questionList = Arrays.asList(questionArray);

//Get a random number within the range of 0..questionList.size()
int chosenIndex = 1; //Made up for simplicity
String chosen = questionList.remove(chosenIndex);

//Now that you have chosen a question, and it was removed from the list
//The list is one element smaller. Next time you get a random number
//make sure you use the range: 0..chosen.size()
System.out.println(chosen);

我相信这就是你要找的东西。

答案 2 :(得分:0)

你应该使用数组。

另请注意,=是一个赋值运算符,==是比较

此:

if(rng <=.5)
        {
            if(q1checker = false)

错了,应该是:

if(rng <=.5)
        {
            if(q1checker == false)

或更好:

if(rng <=.5)
        {
            if(!q1checker)