samedi 15 octobre 2016

Java: Adding two random array elements for each category of a custom arraylist

I am providing the user with two random videos for each category they have selected.

I have an ArrayList of strings for the user preferences.

I also have an ArrayList of all of the videos in the database.

So I am trying to search through each of those category preferences one by one and find two random videos that fit into it those category.

I have implemented a solution that works (On a small dataset). But I am not sure it is optimal method considering there will soon be 500 videos, 50 categories and the user will be able to select 5 category preferences:

This is how I worked it out:

    //Create a new array to store the videos
    ArrayList<Video> videos = new ArrayList<>();

    // Create counter for the position in the user preference array
    int userPrefernceArrayIndex = 0;

    // Create counter for number of successful category guesses
    int numberOfSuccessfulGuesses = 0;

    // Keep running until we have 2 videos for each of the user preferences
    while (videos.size() < MainActivity.userPrefrencesStaticArraylist.size() * 2){

        // Generate a random integer to get an entry random integer from the database array
        Random rand = new Random();
        int randomAlarmVidInt = rand.nextInt(MainActivity.allVideosFromDatabaseStaticArray.size());

        // Find the category of the random video that was chosen
        String categoryForRandomGuess = MainActivity.allVideosFromDatabaseStaticArray.get(randomAlarmVidInt).getVideoCategory();

        // Find the current user video category we are testing for
        String currentCategoryPreference = MainActivity.userPrefrencesStaticArraylist.get(userPrefernceArrayIndex);

        // Check if category of the random video we got is the same as the category user
        // preference we are testing for
        if (categoryForRandomGuess.equals(currentCategoryPreference)){

            // If it the the preference and the random video categories match add it to the video array
            videos.add(MainActivity.allVideosFromDatabaseStaticArray.get(randomAlarmVidInt));
            numberOfSuccessfulGuesses++;

            // If the number of successful guesses is divisible by two then we have added two correct videos
            // for that category so iterate to the next category
            if (numberOfSuccessfulGuesses % 2 == 0){
                userPrefernceArrayIndex++;
            }
        }

Because of the possibility for problems I hardly ever use a while loop or random unless necessary. I also see that guessing the number may not be the best solution memory wise. So I just want to make sure I am doing it the best way to avoid issues.

Thanks for your help




Aucun commentaire:

Enregistrer un commentaire