2016-02-13 3 views
-1

Я пытаюсь сделать игру для мелочей для своего английского класса, который будет случайным образом выбирать вопрос, но не будет выбирать один и тот же дважды. В настоящее время у меня установлен прототип, но я не могу понять, что происходит неправильно, что мешает ему фактически печатать вопросы.
Вот бегемот:Нужна помощь в сортировке вложенных для петель

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) 
} 
} 
+1

Пожалуйста, узнайте о массивах и массивах и используйте их. –

+0

Это было бы намного чище с использованием массивов. Создайте массив String для хранения ваших вопросов и булевского массива того же размера для записи, если каждый из них выбран или нет. –

ответ

0

Вы должны использовать массивы.

помнить также, что = является оператор присваивания, а == является Comparation

Это:

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

неправильно, он должен быть:

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

Или лучше:

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

Также помните, что '==' компаратор не нужен с логическим, поскольку вы можете просто сказать 'if (! Q1checker)' –

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

Из того, что я вижу, вы пытаетесь разрешить им выбирать вопросы до тех пор, пока они не исчерпаются, выбирая случайным образом. Вы можете сделать это легко с помощью 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); 

Я считаю, что это то, что вы ищете.

Смежные вопросы