Добавляйте результат в массив int каждый раз, когда заканчиваете подсчет вхождения

public class HelloWorld{
    public static void main(String[] args){
        //create array with days of week. won't be modified
        String[] daysOfWeek = {"Monday","Tuesday", "Wednesday","Thursday","Friday", "Saturday","Sunday"};
        //pass the array to the eStatistics method so they check frequency of e
        eStatistics(daysOfWeek);
    }


    public static int[] eStatistics(String[] names){
        //create new array that will be the same size of the previous array but will have integers
        int[] newArray = new int[names.length];
        //go over each word (element) in the old array
        for(String word : names){
            System.out.println(word);
            //create a counter to store number of e's
            int counter = 0; //counter here so it resets every time we go over a different word
            int lengthOfWord = word.length();
            //go over each letter in the word
            for(int i = 0; i < lengthOfWord ; i++){
                if (word.charAt(i) == 'e'){ //if the letter is an 'e'
                    counter ++; //increment counter by 1
                }
            }
            // we should add the counter to the new array after we end counting the letter e in each word
            // how?
            // newArray[i] = counter;   ????
            System.out.println(counter);
        }
        return newArray;
    }
}

Цель этой программы - подсчитать частоту 'e' в каждом слове массива daysOfWeek и вернуть массив {0, 1, 2, 0, 0, 0, 0}. Но как я могу добавлять в новый массив сумму е каждый раз, когда заканчиваю считать, сколько их в каждом слове?

Это можно сделать, используя другую инкрементную переменную stackoverflow.com/questions/43470874/….

RGM 13.12.2018 17:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте традиционный цикл за

for (int i = 0; i < names.length; i++) {
   ....
   int lengthOfWord = names[i];
   ....
   newArray[i] = counter;    
}

Если вы используете переменную цикла i во внутреннем цикле, измените ее на j или используйте j для вышеуказанного.

Ответ принят как подходящий

Вы можете сделать это с помощью java-8, изменив метод на:

public static int[] eStatistics(String[] names) {
    int[] newArray = new int[names.length];

    for (int i = 0; i < names.length; i++) {
        newArray[i] = (int) names[i].chars().filter(ch -> ch == 'e').count();
    }

    return newArray;
}

Здесь мы проверяем, сколько раз каждый Нить имеет символ e, и сохраняем счетчик в соответствующем индексе массива.

Спасибо, сработало. Я изменил (int) daysOfweek на (int) имена

user10350176 13.12.2018 17:58

Вы можете использовать Ручей API и собирать результат в массив, а не использовать традиционный цикл for:

public static int[] eStatistics(String[] names) {
    Function<String, Integer> countEs = string -> string.length() - string.replace("e", "").length();
    return Arrays.stream(names).map(countEs).mapToInt(i -> i).toArray();
}

Чтобы объяснить, что это делает:

  • Первая строка определяет Функция, который принимает String и возвращает Integer. Эта функция подсчитывает количество букв e в строке. Эта функция взята из этот ответ и может быть заменена любой другой реализацией, выполняющей то же самое.

Вторая строка выполняет фактическую работу:

  • Arrays.stream() просто создает Stream из массива.
  • map() преобразует String в Integer, используя функцию из первой строки.
  • mapToInt() преобразует каждый Integer в int. Это необходимо, если вы хотите вернуть int[], а не Integer[].
  • toArray() наконец собрать Stream в массив.

Другие вопросы по теме