make a string random, which I select the following results, ignoring the ones that were already obtained

0

I have been asked to do a program which asks me random questions which will be answered true or false; my problem is to make a string for this, but do not make the random do not repeat the questions that I did previously

the code would be something like this

I create the vector

  String [] array = {"A", "B", "C", "D"};
     Random random = new Random();

to select a random index of the vector

int R = random.nextInt(array.length); 
    
asked by Barly Espinal 15.10.2018 в 22:57
source

2 answers

3
String extraerUnElemento(List<String> preguntas) {
    if (preguntas.size() == 0) return null;
    Collections.shuffle(preguntas);
    return preguntas.remove(0);
}

size() returns the number of items in the list.

shuffle() mix the items in the list

remove(int indice) extracts the item positioned in the index and returns it

    
answered by 15.10.2018 в 23:42
1

Here the important thing is to use the Collection.shuffle to mess up the list, I also created a DTO called QuestionResponseDTO, what I do first is to generate the list with the questions (QuestionResponseDTO), then iterate over the list and obtain a random element at a time, and then remove the random element from the list I already got and do not repeat .

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Test {

    public static void main(String[] args) {

        List<PreguntaRespuestaDTO> preguntas = new ArrayList<PreguntaRespuestaDTO>();


        PreguntaRespuestaDTO preguntaRespuestaDTOA = new PreguntaRespuestaDTO();
        preguntaRespuestaDTOA.setNoPregunta("A");
        preguntaRespuestaDTOA.setPregunta("¿Actaulmente estas trabajando?");
        preguntas.add(preguntaRespuestaDTOA);

        PreguntaRespuestaDTO preguntaRespuestaDTOB = new PreguntaRespuestaDTO();
        preguntaRespuestaDTOB.setNoPregunta("B");
        preguntaRespuestaDTOB.setPregunta("¿Tienes auto?");
        preguntas.add(preguntaRespuestaDTOB);

        PreguntaRespuestaDTO preguntaRespuestaDTOC = new PreguntaRespuestaDTO();
        preguntaRespuestaDTOC.setNoPregunta("C");
        preguntaRespuestaDTOC.setPregunta("¿Tienes casa propia?");
        preguntas.add(preguntaRespuestaDTOC);

        PreguntaRespuestaDTO preguntaRespuestaDTOD = new PreguntaRespuestaDTO();
        preguntaRespuestaDTOD.setNoPregunta("D");
        preguntaRespuestaDTOD.setPregunta("¿Eres casado?");
        preguntas.add(preguntaRespuestaDTOD);

        PreguntaRespuestaDTO preguntaRespuestaDTOE = new PreguntaRespuestaDTO();
        preguntaRespuestaDTOE.setNoPregunta("E");
        preguntaRespuestaDTOE.setPregunta("¿Tienes hijos?");
        preguntas.add(preguntaRespuestaDTOE);


        List<PreguntaRespuestaDTO> listaReducida = preguntas;
        PreguntaRespuestaDTO preguntaRandom = null;

        for(int indice= 0; indice<preguntas.size(); indice++){
            //Se obtiene una pregunta random
            preguntaRandom = Test.obtenerRespuestaRandom(listaReducida);
            //Se elimina ese elemnto de la lista el elemento random que se obtuvo
            listaReducida = Test.obtenerListaReducida(listaReducida,preguntaRandom);
            //Se imprime la pregunta
            System.out.println(preguntaRandom.getNoPregunta()+"   "+preguntaRandom.getPregunta());
        }

    }

    public static PreguntaRespuestaDTO obtenerRespuestaRandom(List<PreguntaRespuestaDTO> preguntas){
        Random randomGenerator = new Random();
        //Se genera el random
        int index = randomGenerator.nextInt(preguntas.size());
        if (preguntas.size() == 0) return null;
        //Se desordena la lista
        Collections.shuffle(preguntas);
        //se obtiene el indice de la lista
        PreguntaRespuestaDTO preguntaRespuestaDTO = preguntas.get(index);
        return preguntaRespuestaDTO;
    }
    public static List<PreguntaRespuestaDTO> obtenerListaReducida(List<PreguntaRespuestaDTO> listaReducida, PreguntaRespuestaDTO preguntaAEliminar){
        List<PreguntaRespuestaDTO> nuevaLista = new ArrayList<PreguntaRespuestaDTO>();
        for(PreguntaRespuestaDTO pregunta:listaReducida){
            //Solo se agregan a la nueva lista los demás elementos 
            if(!pregunta.getNoPregunta().equals(preguntaAEliminar.getNoPregunta())){
                nuevaLista.add(pregunta);
            }
        }
        return nuevaLista;
    }
}

    class PreguntaRespuestaDTO {
        private String noPregunta;
        private String pregunta;
        private boolean respuesta;

        /**
         * @return the noPregunta
         */
        public String getNoPregunta() {
            return noPregunta;
        }

        /**
         * @param noPregunta
         *            the noPregunta to set
         */
        public void setNoPregunta(String noPregunta) {
            this.noPregunta = noPregunta;
        }

        /**
         * @return the pregunta
         */
        public String getPregunta() {
            return pregunta;
        }

        /**
         * @param pregunta
         *            the pregunta to set
         */
        public void setPregunta(String pregunta) {
            this.pregunta = pregunta;
        }

        /**
         * @return the respuesta
         */
        public boolean isRespuesta() {
            return respuesta;
        }

        /**
         * @param respuesta
         *            the respuesta to set
         */
        public void setRespuesta(boolean respuesta) {
            this.respuesta = respuesta;
        }
    }

This is the result:

E Do you have children?

C Do you have your own home?

B Do you have a car?

D Are you married?

A Are you currently working?

Note: Each time it is run, it returns the questions in a different order.

    
answered by 16.10.2018 в 16:46