Как сделать подсчет в java

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

У меня ArrayList есть класс коллекции Java, следующим образом:

Как видите, animals ArrayList состоит из 3 bat элементов и одного owl элемента. Мне было интересно, есть ли какой-либо API в структуре Collection, который возвращает количество bat вхождений или есть другой способ определить количество вхождений.

Я обнаружил, что в Google Collection Multiset есть API, который возвращает общее количество вхождений элемента. Но это совместимо только с JDK 1.5. Наш продукт в настоящее время находится в JDK 1.6, поэтому я не могу его использовать.

Это одна из причин, почему вы должны программировать на интерфейс, а не на реализацию. Если вам удастся найти нужную коллекцию, вам нужно изменить тип, чтобы использовать эту коллекцию. Я отправлю ответ на это.

Я уверен, что статический частотный метод в Коллекциях пригодится здесь:

Вот как бы я это сделал в любом случае. Я уверен, что это JDK 1.6.

Всегда предпочитайте Api из JRE, чтобы добавить еще одну зависимость в проект. И не изобретай велосипед!

Использование Function.identity () (со статическим импортом) вместо e -> e делает чтение более приятным.

Это может сделать больше, чем было запрошено, но это именно то, что я хотел (получить карту отдельных элементов в списке по их количеству). Кроме того, этот вопрос был лучшим результатом в Google, когда я искал.

Ниже приведен очень простой пример того, как это можно написать. Это всего лишь образец, готовый к производству Список будет намного сложнее.

Применяемые здесь ОО-принципы: наследование, полиморфизм, абстракция, инкапсуляция.

Ну, всегда нужно пробовать композицию, а не наследование. Ваша реализация теперь привязана к ArrayList, когда могут возникнуть ситуации, когда вам понадобится LinkedList или другой. Ваш пример должен был взять другой LIst в его конструкторе / фабрике и вернуть оболочку.

Я полностью с вами согласен. Причина, по которой я использовал наследование в этом примере, заключается в том, что гораздо проще показать работающий пример, используя наследование, чем композицию (для реализации интерфейса List). Наследование создает самую высокую связь.

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

К сожалению, нет простого вызова метода, который может это сделать. Все, что вам нужно сделать, это создать карту и рассчитывать частоту с ней.

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

@dehmann, я не думаю, что он в буквальном смысле хочет узнать количество появлений летучих мышей в коллекции из 4 элементов, я думаю, что это были просто примерные данные, чтобы мы лучше понимали :-).

@ Уксус 2/2. Программирование - это то, что нужно делать правильно сейчас, поэтому мы не будем вызывать головные боли или плохой опыт для кого-то еще, будь то пользователь или другой программист в будущем. PS: Чем больше кода вы пишете, тем больше шансов, что что-то может пойти не так.

@mP: Пожалуйста, объясните, почему это не масштабируемое решение. Рэй Хидайт строит счетчик частот для каждого токена, чтобы каждый токен можно было искать. Какое решение лучше?

Обратитесь к моему ответу ниже - правильный ответ - использовать структуру, которая поддерживает идею подсчета с самого начала, а не подсчет записей от начала до конца каждый раз, когда делается запрос.

@mP То есть, вы просто отрицаете мнение всех, у кого другое мнение, чем у вас? Что если он не может использовать Сумку по какой-то причине или застрял с использованием одной из родных Коллекций?

И, похоже, ваш ответ также требует не родных вещей, поэтому ваш комментарий кажется немного странным.

Спасибо вам обоим, ребята. Я считаю, что один из двух подходов или оба могут работать. Я попробую завтра.

На самом деле, класс Collections имеет статический метод с именем : quency (Collection c, Object o), который возвращает количество вхождений искомого элемента, кстати, для вас это будет отлично работать:

wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали авторы-волонтеры.

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

Определение лимитов персонажей становится критически важным, когда обновления через твиты и посты в Facebook выполняются через API.

Примечание: эта программа не будет работать на онлайн-компиляторах. Пожалуйста, создайте в вашей системе текстовый файл и укажите путь для запуска этой программы в вашей системе.

// Java-программа для подсчета
// количество символов в файле

public class Test

public static void main(String[] args) throws IOException

File file = new File( "C:\\Users\\Mayank\\Desktop\\1.txt" );

FileInputStream fileStream = new FileInputStream(file);

InputStreamReader input = new InputStreamReader(fileStream);

BufferedReader reader = new BufferedReader(input);

int countWord = 0 ;

int sentenceCount = 0 ;

int characterCount = 0 ;

int paragraphCount = 1 ;

int whitespaceCount = 0 ;

// Чтение построчно из

// файл, пока ноль не будет возвращен

while ((line = reader.readLine()) != null )

// // s + это разделитель пространства в java

String[] wordList = line.split( "\\s+" );

whitespaceCount += countWord - 1 ;

// [. ] + это разделитель предложений в java

String[] sentenceList = line.split( "[. ]+" );

System.out.println( "Total word count plain">+ countWord);

System.out.println( "Total number of sentences plain">+ sentenceCount);

System.out.println( "Total number of characters plain">+ characterCount);

System.out.println( "Number of paragraphs plain">+ paragraphCount);

System.out.println( "Total number of whitespaces plain">+ whitespaceCount);

Используемые встроенные функции

  1. File (String pathname): java.io.File: Создает новый экземпляр File путем преобразования указанной строки пути в абстрактный путь.
    Синтаксис:
  2. FileInputStream (File file): java.io.FileInputStream: Создает FileInputStream, открывая соединение с реальным файлом, именем файла которого является объектный файл File в файловой системе.
    Синтаксис:
  3. InputStreamReader (InputStream in): java.io.InputStreamReader: создает InputStreamReader, который использует кодировку по умолчанию.
    Синтаксис:
  4. BufferedReader (Reader in): java.io.BufferedReader: Создает буферный поток ввода символов, который использует размер буфера ввода по умолчанию.
    Синтаксис:

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Попробуем написать простейший калькулятор, который берет два числа и проводит с ними операции сложения, вычитания, умножения или деления. Результат отображает в виде полного выражения.

Project name: P0191_SimpleCalculator
Build Target: Android 2.3.3
Application name: SimpleCalculator
Package name: ru.startandroid.develop.simplecalculator
Create Activity: MainActivity

Откроем main.xml и нарисуем экран:

Тут есть два поля ввода, 4 кнопки и текстовое поле для вывода. Обратите внимание на атрибут inputType для EditText. Он задает тип содержимого. Я указал numberDecimal – т.е. в поле получится ввести только цифры и запятую, буквы он не пропустит. Это удобно, не надо самому кодить различные проверки.

Для TextView указан атрибут gravity. Он указывает, как будет расположен текст в TextView. Не путайте с layout_gravity, который отвечает за размещение TextView в ViewGroup.

Теперь нам надо читать содержимое полей, определять какую кнопку нажали и выводить нужный результат. Открываем MainActivity.java и пишем код

(добавляете только строки 3 и 4)

И напишем код создания и обработки меню:

Сохраним все, запустим. Появилось два пункта меню:
Reset – очищает все поля
Quit – закрывает приложение

На следующем уроке:

- рассмотрим анимацию View-компонентов

- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

- новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

6 сентября 2014 Мария (admin)

В уроке 8 мы затронули логические операторы, они нам были необходимы для формирования логического выражения в условиях if. Этот урок будет посвящен математике в Java, и поэтому мы рассмотрим подробнее арифметические операторы и частично возможности класса Math.

Но для начала, выясним, что же такое операторы. Операторы это специальные символы, отвечающие за ту или иную операцию, например сложение, умножение, сравнение. Все операторы в Java можно разбить на 4 класса — арифметические, битовые, операторы сравнения и логические.

Арифметические операторы в Java

Для стандартных арифметических операций, таких как сложение, вычитание, умножение, деление в Java используются традиционные символы, к которым мы привыкли со школы:

Примечание: при операции деления, если оба аргумента являются целыми числами, то в результате получим целое число. Дробная часть, если такая имеется, отбросится. Если хотим получить число с дробной частью, то нужно, чтобы один из аргументов был типа double. Это можно указать в самом выражении при помощи добавления после числа .0 или .d. Пример:

В Java также имеется специальный оператор %, обозначающий остаток от делния.

Пример использования: дан массив целых чисел, вывести на консоль только те числа, которые делятся на 3.

Операции с присваиванием

Рассмотрим задачу вывода на экран 10 первых четных чисел чисел

мы можем записать сокращенно

+= это оператор сложения с присваиванием. Подобные операторы есть для всех основных 5 операций, рассмотренных выше

Пример использования: Найти факториал числа 7.

Инкрементирование и декрементирование

Инкремент, обозначается ++ и увеличивает значение переменной на единицу. Декремент обозначается — и уменьшает значение на единицу. С инкрементом и декрементом мы часто встречаемся в цикле for.

Инкремент и декремент бывают двух форм

Различие префиксной и постфиксной формы проявляется только тогда, когда эти операции присутствуют в выражениях. Если форма префиксная, то сначала произойдет увеличение (или уменьшение) переменной на единицу, а потом с новым значением будет произведены дальнейшие вычисления. Если форма постфиксная, то расчет выражения будет происходить со старым значением переменной, а переменная увеличится (или уменьшится) на единицу после вычисления выражения. Пример

В первом случае сначала переменная a увеличится на 1, потом произойдет вычисление всего выражения. Во втором случае произойдет вычисление выражения при старом значении b = 3, и после вычисления b увеличится на 1, на результат в postfix это уже не повлияет.

Если вы поняли принцип работы постфиксного и префиксного инкремента/декремента, то предлагаю решить в уме такую задачу:

Вопрос: чему в итоге равны x и y? После того, как вы сделали предположение, проверьте его в java.

Задача со зведочкой. Дан код:

Какие числа будут выведены на экран? Почему? Разобраться самостоятельно.

Примечание: инкремент и декремент применяются только к переменной. Выражение вида 7++ считается недопустимым.

Математические функции и константы (класс Math)

Для решения задач нередко требуется использование математических функций. В Java такие функции включены в класс Math. Для того, чтобы использовать методы класса Math, нужно подключить его в начале .java файла с вашим кодом.

Часто используемые математические функции

  • sqrt(a) — извлекает квадратный корень из числа а.
  • pow(a, n)a возводится в степень n.
  • sin(a), cos(a), tan(a) — тригонометрические функции sin, cos и tg угла a указанного в радианах.
  • asin(n), acos(n), atan(n) — обратные тригонометрические функции, возвращают угол в радианах.
  • exp(a) — возвращает значение экспоненты, возведенной в степень a.
  • log(a) — возвращает значение натурального логарифма числа a.
  • log10(a) — возвращает значение десятичного логарифма числа a.
  • abs(a) — возвращает модуль числа a.
  • round(a) — округляет вещественное число до ближайшего целого.

Константы

Упражнения

  1. Дан массив целых чисел, найти среди элементов массива числа, которые делятся на 3 и на 6
  2. Посчитать среднее арифметическое чисел в массиве
  3. Известны катеты прямоугольного треугольника, найти его площадь и периметр
  4. Даны два целых числа, найти их наибольший общий делитель и наименьшее общее кратное
  5. Даны радиус вращения и высота конуса, вычислить объем конуса.


Категория: Уроки Java

Комментариев к записи: 13

Почему в выражении y = —y — y—; decrement со знаком минуса не срабатывает, а с плюсом работает?

не знаю почему у вас не срабатывает.. все должно срабатывать.

Проверил действие кода на другом языке(AS3), результат был тот же. Значит это не ошибка, а просто особенность выполнения этих математических действий.

Здравствуйте,
в первом задании можно было 1 цикл использовать с условием if(arr[i]%3==0 && arr[i]%6==0) Проверку на >0 делать не обязательно. При поиске среднего арифметического можно бы было сразу работаться типом double. 4 задание не учтен случай, если числа равны. Еще как вариант, в случае n2>n1, можно значения n2 и n1 поменять местами, чтобы не писать потом один и тот же код 2 раза.

Читайте также: