ClassNotFoundException в Eclipse, все пакеты находятся в одной папке src - PullRequest
1 голос
/ 08 апреля 2011

Я работаю над программой калькулятора, которая работает с консоли, которая также должна поддерживать создание встроенных функций, например inline _FOO{a1, a2} a1 + a2 объявляет функцию, и вызов _FOO{2,3} должен вернуть 2 + 3. Я использую класс Converter для всех операций разбора и вычислений. Я создал класс с именем InlineFunction в том же пакете, который содержит реализации функций по умолчанию для программ, которые все работают нормально, но при попытке вызвать встроенную функцию я получаю ошибку. При отладке я заметил, что когда программа работает нормально до того момента, когда я фактически объявляю новую встроенную функцию, InlineFunction function = new InlineFunction(); я сразу получаю ClassNotFoundException. Я не могу понять, почему, потому что эта функция находится в том же пакете, что и другие рабочие функции, и я импортирую весь пакет в класс Converter.

РЕДАКТИРОВАТЬ: код для InlineFunction:

package oop.ex2.functions;

import java.util.LinkedHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import oop.ex2.main.UndeclaredVariableException;

public class InlineFunction implements Calculable {
    //Regular expression for finding a variable name.
    private static final String VARIABLE_NAME_REGEX = "@[a-z0-9]+";
    //Pattern for finding a variable name.
    private static final Pattern VARIABLE_NAME = Pattern.compile(VARIABLE_NAME_REGEX);
    private LinkedHashMap<String, Double> _parameters;
    private String _code;

    public InlineFunction(String code, String[] parameters) {
        _parameters = new LinkedHashMap<String, Double>();
        _code = code;
        for (String name: parameters) {
            _parameters.put(name, 0d);
        }
    }

    @Override
    public String calculate(Double[] parameters) {
        if (parameters.length != _parameters.size()) {
            throw new IllegalParameterNumberException();
        }
        int parameterIndex = 0;
        for (String key: _parameters.keySet()){
            _parameters.put(key, parameters[parameterIndex]);
        }
        _code = replaceParameters(_code);
        return _code;
    }

    private String replaceParameters(String expression) {
        Matcher variableName = VARIABLE_NAME.matcher(expression);
        while (variableName.find()) {
            if (_parameters.containsKey(variableName.group())) {
                expression = variableName.replaceFirst(_parameters.get(variableName.group()).toString());
                //Reset the matcher, since the expression was changed
                variableName = VARIABLE_NAME.matcher(expression);
            } else {
                throw new UndeclaredVariableException();
            }
        }
        return expression;
    }
}

1 Ответ

0 голосов
/ 19 января 2013

Проблема была связана с неправильной обработкой входных данных, предоставленных конструктору, и была исправлена.

...