Создание нового объекта из аргументов, заданных через строку cmd, дает мне OutOfMemoryError, выброшенную из UncaughtExceptionhandler

Я не могу выяснить, почему выше ошибка. Это работает нормально, когда я ввожу только 2 аргумента (например, 22,5 км), использование более чем (20,5 км 400 футов) дает ошибку.

Вот код:

if (args.length > 0)
{            
    for (int i = 0; i < args.length; i = +2)
    {
        lengthsCollection.add(new Length(Double.parseDouble(args[i]), args[i+1]));    
    }
}

Длина класса работает нормально везде

public class Length {
    private double valueM;
    private String unitM;

    public Length(double value, String unit)  
    {
        this.valueM = value;
        this.unitM = unit;
    }

Кто-нибудь может мне помочь? Я думал, что мой код должен работать, если пользователь вводит правильно (длина + единица пары)

1 ответ

Решение

Эта итерация:

 for (int i = 0; i < args.length; i = +2)

выполняется навсегда, когда args.length > 2 так как i остатки 2 навсегда. Отсюда ошибка памяти.

Что вам нужно это:

for (int i = 0; i < args.length; i += 2)
Другие вопросы по тегам