Почему возникает ошибка OutOfMemoryError?

113
05 января 2021, 05:50

Вводится из консоли дата (тип String). При посимвольном сравнении, на второй вводимой дате вылетает ошибка java.lang.OutOfMemoryError: Java heap space

import java.io.*;
import java.util.ArrayList;

class Goods implements Serializable {       //класс "Товары". каждый товар - объект.
    private String name;
    private String currency;
    private String date;
    private int cost;
    Goods(String name, String cost, String currency, String date) {
        this.name = name;
        this.cost = Integer.parseInt(cost);
        this.currency = currency;
        this.date = date;
    }
    String getName(){return name;}
    int getCost(){ return cost;}
    String getCurrency(){return currency;}
    String getDate(){return date;}
}

class ShowGoods {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = new PrintWriter(System.out, true);
        String str;
        String parts[] = new String[5];
        ArrayList <Goods> myGoods = new ArrayList<>();      // массив объектов-товаров
        Goods nextGood, comGood;        // пременные для работы с объектами-товарами из массива
        pw.println();
        pw.println("Enter the purchase. Format: purchase 2019-04-25 12 USD 'Photo Frame' ");
        pw.println("The input end sign is string 'stop'.");
        do {
            str = br.readLine();
            if(str.compareTo("stop") == 0) break;
            int i=0;
            for (String retval : str.split(" ", 5)) {
                parts[i] = retval;
//              System.out.println(parts[i]);
                i++;
            }
            switch(parts[0]) {
                case "purchase":
                    Goods good1 = new Goods(parts[4], parts[2], parts[3], parts[1]);
                    if( myGoods.size() > 0) {
                        String goodDate, nextDate;
                        done:
                        for(int j=0; j < myGoods.size(); j++) {         // сравнение даты вводимой покупки с уже введёнными
                            nextGood = myGoods.get(j);
                            goodDate = good1.getDate();
                            nextDate = nextGood.getDate();
                            for(int k=0; k<10; k++) {           // посимвольное сравнение дат. Вот здесь вылетает OutOfMemoryError: 
                                char g1 = goodDate.charAt(k);
                                char ng = nextDate.charAt(k);
                                if(g1 < ng) {
                                    myGoods.add(j, good1);
                                    break done;
                                }
                            }
                            if( j==(myGoods.size() - 1) ) myGoods.add(good1);   // !!! только что еще раз прогнал, указало эту строку !!!
                        }
                    } else myGoods.add(good1);
                break;

        } while(str.compareTo("stop") != 0);
    }
}
READ ALSO
Алгоритм вычленения &gt;3 &lt;6 значного числа

Алгоритм вычленения >3 <6 значного числа

Требуется алгоритм который бы вытащил >3 <6 значное число из строки

92
Как один класс может реализовать 2 интерфейса?

Как один класс может реализовать 2 интерфейса?

Читаю книгу по паттернам (паттерны проектирования, Эрик и Элизабет Фримен42 ст

105
Конфигурация spring-webmvc.xml

Конфигурация spring-webmvc.xml

Помогите сконфигурировать Spring

98
Ошибка с заполнением Spinner Android

Ошибка с заполнением Spinner Android

Хочу полученные результаты от сервера закинуть в Spinner, но выкидывает ошибку:

112