ошибка типа возврата Java и обработка ошибок - PullRequest
0 голосов
/ 29 октября 2018

Я новичок. Один метод имеет две ошибки. Пожалуйста, помогите решить эти проблемы.

Я делаю файловую систему, используя многоузловое дерево.

Этот метод возвращает файл / каталог с указанным именем в подкаталоге. После зацикливания, если у него нет такого файла / каталога, он должен выдать ошибку.

import java.util.ArrayList;
import java.util.Arrays;
import driver.exception.InvalidFileDirectoryException;

public class FileNode {

    private FileNode parent;
    private ArrayList<FileNode> children = new ArrayList<FileNode>();
    private String name;


    public FileNode getChild(String name) {   // This method must return a type of FileNode.
        for (int i = 0; i < children.size(); i++) {
                if (children.get(i).getName() == name) {
                    return children.get(i);
                }
                if ((i == children.size()-1) 
                    && (children.get(i).getName() != name)) {
                    throw new InvalidFileDirectoryException(
                        name + ": No such file or directory");   // Unhandled exception type InvalidFileDirectoryException
                }
        }
    }

Я могу понять первую ошибку. Этот метод ничего не может вернуть, если такого файла или каталога нет. Тем не менее, я хочу дать сообщение об ошибке в этом случае. Что я должен делать? Пожалуйста, помогите!

public class InvalidFileDirectoryException extends Exception {

    public InvalidFileDirectoryException() {
        super();
    }

    public InvalidFileDirectoryException(String message) {
        super(message);
    }
}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Измените getChild метод на: -

public FileNode getChild(String name) throws InvalidFileDirectoryException {
    for (int i = 0; i < children.size(); i++) {
        if (children.get(i).getName().equals(name)) {
            return children.get(i);
        }
    }
    throw new InvalidFileDirectoryException(name + ": No such file or directory");
}

Это будет сканировать коллекцию children. Если совпадение найдено, ребенок будет возвращен из этого метода. Если цикл завершен и совпадение не найдено, оно выдаст исключение. Обратите внимание, что подпись метода говорит throws InvalidFileDirectoryException.

0 голосов
/ 29 октября 2018

Все потенциальные пути в вашем методе должны возвращать значение. Вы не можете иметь метод, который возвращает значение и не возвращает значение!

Вы возвращаетесь только из двух операторов if в теле цикла. Что если оба оператора if никогда не имеют истинного условия ?! Таким образом: добавить оператор возврата и после цикла. Вероятно, метод должен вернуть ноль тогда. Если это действительно ошибка, вы должны выбросить исключение (безусловно).

И похоже, что вы используете == для сравнения строк. Это неправильно, вы должны использовать равно () вместо.

...