#java #for-loop #arraylist #iteration
Вопрос:
ArrayListlt;Integergt; companiesId = new ArrayListlt;gt;(); int numberOfCompanies = 10; // Just for example ... float profit; Scanner input = new Scanner(System.in); for(int i = 0; i lt; numberOfCompanies; i ) { int companyId = input.nextInt(); if (!companiesId.contains(companyId)) { companiesId.add(companyId); } if (companiesId.get(i) == 1) { profit = 1000; } else if (companiesId.get(i) == 2) { profit = 2000; } }
Теперь я хочу распечатать все идентификаторы компании из ArrayList с прибылью, введенной для каждого идентификатора, но я не знаю, как это сделать с ArrayList.
Это должно быть:
1 1000 2 2000 ...
Комментарии:
1. Я надеюсь, что мой ответ-именно то, что вы искали.
Ответ №1:
Вы не можете сделать то, о чем просите, потому что часть информации, которую вам нужно распечатать (прибыль), потеряна. Что вам нужно сделать в первую очередь, так это создать класс, содержащий идентификатор компании и прибыль. С помощью новой версии Java вы можете создать record
приложение, которое будет содержать такую информацию. Запись Java-это не что иное, как POJO, которое идентифицируется с этим новым ключевым словом (запись) и не требует от вас создания всего стандартного кода. Ваш класс записи будет выглядеть примерно так:
public record CompanyRecord(int companyID, float profit) { }
Вам даже не нужно переопределять toString()
. То есть, если вы не хотите печатать содержимое записи иным способом, чем по умолчанию. Затем вам нужно будет создать список CompanyRecord
объектов:
ArrayListlt;CompanyRecordgt; companies = new ArrayListlt;gt;();
Тогда вы сможете делать все, что вам нужно. Например, я создал эту простую демонстрационную версию, которая создает список из 10 записей компании и использует счетчик циклов для установки идентификатора компании и в качестве множителя прибыли. Наконец, он выводит запись на консоль.
public class CompanyRecordDemo { public static void main(String[] args) { ArrayListlt;CompanyRecordgt; companies = new ArrayListlt;gt;(); float profit = 1000.0f; for (int i = 1; i lt;= 10; i ) { CompanyRecord rec = new CompanyRecord(i, profit * i); companies.add(rec); System.out.println(rec); } // do whatever you need with the list... } }
Результатом этой небольшой программы является:
CompanyRecord[companyID=1, profit=1000.0] CompanyRecord[companyID=2, profit=2000.0] CompanyRecord[companyID=3, profit=3000.0] CompanyRecord[companyID=4, profit=4000.0] CompanyRecord[companyID=5, profit=5000.0] CompanyRecord[companyID=6, profit=6000.0] CompanyRecord[companyID=7, profit=7000.0] CompanyRecord[companyID=8, profit=8000.0] CompanyRecord[companyID=9, profit=9000.0] CompanyRecord[companyID=10, profit=10000.0]
Это, вероятно, самый простой способ выполнить то, что вам нужно. Вам нужно будет использовать Java 14 или более позднюю версию, чтобы использовать записи Java, но я рекомендую вам использовать последнюю версию.
ОБНОВЛЕНИЕ: Важно отметить, что записи Java являются неизменяемыми. Таким образом, у них нет сеттеров (методов мутаторов). Вам придется задать значения через конструктор, и впоследствии значения не могут быть изменены. Вы можете получить доступ (получить) к значениям свойств, вызвав метод, имя которого совпадает с именем поля. Например, метод получения для profit
is profit()
. Например rec.profit()
.