При повторном вызове program.Menu();
и добавлении нового элемента в список - вылетает Exeption:
OutOfMemoryError: Java heap space
public class Start {
public static void main(String[] args) {
SanyaArray program = new SanyaArray();
program.Start();
program.Menu();
}
}
public class SanyaArray extends Menus {
Menus menus = new Menus();
void Start(){// Создание списка и указание размера.
menus.startMenu();
menus.arraySize(menus.getArray());
menus.printMainMenu();
System.out.println(menus.getArray());
}
void Menu(){//Вызов Главного меню с ф-циями.Меню доступно если список уже создан.
if (menus.getArray().equals(null)){
System.out.println("Для управления списком - сначало создайте его с помощью Start.");
}else {
menus.printMainMenu();
}
}
}
public class Menus implements Functions{
private ArrayList<Integer> array;
public ArrayList<Integer> getArray() {
return array;
}
public void setArray(ArrayList<Integer> array) {
this.array = array;
}
@Override
public void add(ArrayList<Integer> array) { //закончить
System.out.println("Введите целое число для добавления в список.");
int element = getInteger(4);
for (int i = 0; i < array.size(); i++) { //переписать
int a = array.get(i) + element;
array.add(i,a);
}
array.add(element);
System.out.println("Готово.");
}
@Override
public void delete(ArrayList<Integer> array) {
System.out.println("Введите индекс для удаления элемента.");
int index = getInteger(2);
if (getArray().size()<index) {
for (int i = 0; i < array.size(); i++) {
int a = array.get(i) - array.get(index);
array.add(i, a);
}
}else {
System.out.println("Ошибка, размер списка " + getArray().size());
}
array.remove(index);
}
@Override
public void find(ArrayList<Integer> array) {
System.out.println("Введите элемент для поиска.");
int element = getInteger(3);
for (int i = 0; i < array.size(); i++) {
if (array.get(i) == element){
System.out.println("We found you'r element at index " + i + "Element : " + element);
}
}
}
@Override
public void findElementByIndex(ArrayList<Integer> array) {
System.out.println("Введите индекс.");
int index = getInteger(2);
System.out.println("Index : " + index + " Element : " + array.get(index));
}
@Override
public void maxValue(ArrayList<Integer> array) {
System.out.println("MaxValue in array : " + Collections.max(array));
}
@Override
public void minValue(ArrayList<Integer> array) {
System.out.println("MinValue in array : " + Collections.min(array));
}
@Override
public void averageElement(ArrayList<Integer> array) {
double averageElement;
int sum = 0;
for (int i = 0; i < array.size(); i++) {
sum += array.get(i);
}
averageElement = sum / 2;
System.out.println("Average Element : " + averageElement);
}
public int startMenu() {
System.out.println("Добрый день! \nСделайте выбор:\n1)Cоздать список.\n2)Выход");
int choice = getInteger(4);
if (choice == 1) {return choice;}
if (choice==2) {System.exit(0);}
return choice;
}
public void arraySize(ArrayList<Integer> array) {
System.out.println("Введите размер списка : \n0) Выход ");
int choice = getInteger(2);
if (choice > 0) {
setArray(new ArrayList<>(choice));
return;
}
if (choice == 0) {
System.exit(0);
}
}
public void printMainMenu() { //закончить
System.out.println("Выберите следующие действие с списком : "); //последующие меню
System.out.println("1)Добавить элемент");
System.out.println("2)Удалить элемент");
System.out.println("3)Найти элемент по значению");
System.out.println("4)Найти элемент по индексу");
System.out.println("5)Показать максимальное значение в списке");
System.out.println("6)Показать минимальное значение в списке");
System.out.println("7)Найти среднее арифметическое всех значений");
System.out.println("0)Выход");
int choice = getInteger(1);
switch (choice) {
case 1:
add(getArray());
break;
case 2:
delete(getArray());
break;
case 3:
find(getArray());
break;
case 4:
findElementByIndex(getArray());
break;
case 5:
maxValue(getArray());
break;
case 6:
minValue(getArray());
break;
case 7:
averageElement(getArray());
break;
case 0:
System.exit(0);
break;
}
}
// В параметрах метода нужно передать нужный вариант операции.
// 1) Введите число от 1 до 7
// 2) Целое позитивное число, которое больше или равно 0.
// 3) Любое целое число.
// 4) Целое позитивное число, которое больше 0.
public int getInteger(int option) {//метод для получения чисел.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int element = 0;
if (option == 1) {
while (true) {
try {
element = Integer.parseInt(reader.readLine());
if (element > 0 && element < 8) {
break;
} else {
System.out.println("Введите число от 1 до 7.");
continue;
}
} catch (Exception e) {
System.out.println("Ошибка ввода,введите целое число!");
}
}
}
if (option == 2) {
while (true) {
try {
element = Integer.parseInt(reader.readLine());
if (element >= 0) {
break;
} else {
System.out.println("Введите позитивное число,которое больше или равно 0!");
continue;
}
} catch (Exception e) {
System.out.println("Ошибка ввода,введите целое число!");
}
}
}
if (option == 3) {
while (true) {
try {
element = Integer.parseInt(reader.readLine());
} catch (Exception e) {
System.out.println("Ошибка ввода,введите целое число!");
}
}
}
if (option == 4) {
while (true) {
try {
element = Integer.parseInt(reader.readLine());
if (element > 0) {
break;
} else {
System.out.println("Введите позитивное число,которое больше 0!");
continue;
}
} catch (Exception e) {
System.out.println("Ошибка ввода,введите целое число!");
}
}
}
return element;
}
}
Ход работы программы:
Добрый день!
Сделайте выбор:
1)Cоздать список.
2)Выход
1
Введите размер списка :
0) Выход
123
Выберите следующие действие с списком :
1)Добавить элемент
2)Удалить элемент
3)Найти элемент по значению
4)Найти элемент по индексу
5)Показать максимальное значение в списке
6)Показать минимальное значение в списке
7)Найти среднее арифметическое всех значений
0)Выход
1
Введите целое число для добавления в список.
32
Готово.
[32]
Выберите следующие действие с списком :
1)Добавить элемент
2)Удалить элемент
3)Найти элемент по значению
4)Найти элемент по индексу
5)Показать максимальное значение в списке
6)Показать минимальное значение в списке
7)Найти среднее арифметическое всех значений
0)Выход
1
Введите целое число для добавления в список.
32
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3719)
at java.base/java.util.Arrays.copyOf(Arrays.java:3688)
at java.base/java.util.ArrayList.grow(ArrayList.java:237)
at java.base/java.util.ArrayList.grow(ArrayList.java:242)
at java.base/java.util.ArrayList.add(ArrayList.java:499)
at Menus.add(Menus.java:29)
at Menus.printMainMenu(Menus.java:130)
at SanyaArray.Menu(SanyaArray.java:20)
at Start.main(Start.java:5)
Process finished with exit code 1
Every time you are in the inner for loop you add a new element to array. Since the loop condition specifies to continue while i < array.size(), i starts out less than the size, and you add one to both every time, i never reaches array.size() and you keep adding elements until the heap space runs out.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый день, столкнулся со следующей проблемойСоздал массив и инициализировал в нем элементы
Здравствуйте, вопрос по androidУ меня есть двухуровневый список и всплывающее контекстное меню, подскажите пожалуйста как мне добыть id группы...
Стандартные, такие как Chosen или Select2 не подходят, тк