BitNeBolt
@BitNeBolt

Почему не изменяется значение переменной?

В главной активити, в методе OnCreate() загружается файл .txt в ArrayList. Этот массив содержит в себе Предложения из текста.

Я создал отдельный класс с методом CreateWords(), цель которого - выбрать одно предложение из текста, 3 слова, которых нет в нем, и 1 слово, которое есть.

Но при запуске приложения может быть и такое, что из 4 слов 2, а то и 3 могут быть в нужном предложении.

Вот моя попытка, но она не работает. Не могли бы вы подсказать, что не так?

public static class WordInText
    {
        public static int right_sent_index; //индекс нужного предложения в массиве предложений
        public static ArrayList<String> right_array; //нужный массив, в котором предложение разбито на слова
        public static int right_word_index; //нидекс нужного слова в нужном массиве

        private static int random_sent_index; //случайное предложение
        private static int random_word_index; //индекс случайного слова в случ. предлодении
        private static ArrayList<String> random_array; //массив, аналогичный roght_array

        //flag - индекс в массиве out[] слова, которое должно быть в предложении
        public static String[] CreateWords(int flag)
        {
            right_sent_index = TaskGenerator.random.nextInt(MainActivity.sentences.size());
            right_array = new ArrayList<String>(Arrays.asList(MainActivity.sentences.get(right_sent_index).toLowerCase().split(" ")));
            right_word_index = TaskGenerator.random.nextInt(right_array.size());

            String[] out = new String[4];

            for (int i = 0; i < 4; i++)
            {
                if (i == flag)
                {
                    out[i] = (right_array.get(right_word_index));
                }

                else
                {
                    random_sent_index = TaskGenerator.random.nextInt(MainActivity.sentences.size());

                    //чтобы случайное предложение не было нужным
                    while (random_sent_index == right_sent_index)
                    {
                        random_sent_index = TaskGenerator.random.nextInt(MainActivity.sentences.size());
                    }

                    random_array = new ArrayList<String>(Arrays.asList(MainActivity.sentences.get(random_sent_index).toLowerCase().split(" ")));
                    random_word_index = TaskGenerator.random.nextInt(random_array.size());
                    String random_word = random_array.get(random_word_index);

                    //одна из попыток
                    for (int j = 0; j < 5; j++)
                    {
                        //if (right_array.contains(random_array.get(WordInText.random_word_index)))// & Arrays.asList(out).contains(random_array.get(random_word_index).toLowerCase()))
                        //if (TaskGenerator.ArrayListContains(WordInText.right_array, random_word))
                        if (right_array.contains(random_word))
                        {
                            //Toast.makeText(context, "AGAIN", Toast.LENGTH_SHORT).show();
                            WordInText.random_word_index = TaskGenerator.random.nextInt(random_array.size());
                        }
                        else
                        {
                            break;
                        }
                    }

                    /*while (right_array.contains(random_word))
                    {
                        WordInText.random_word_index = TaskGenerator.random.nextInt(random_array.size());
                    }*/

                    out[i] = random_array.get(random_word_index);
                }
            }

            return out;
        }
    }


P.S. версия с циклом for выдает такой же результат, как и while. Почему же значение переменной индекса не изменяется?
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 1
sandroisu
@sandroisu
Все good
То есть все что после else удалить нужно, оставить только return out. Все или почти все индексы не нужны по моему
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы