Как исправить ошибку NumberFormatException? - PullRequest
0 голосов
/ 06 мая 2020

Исключение ошибки в потоке «main» java .lang.NumberFormatException: для входной строки: «треугольник» возникает, когда я пытаюсь запустить свою программу. Однако, если я удалю все элементы в Arrays.asList(), никаких результатов или ошибок не будет.

Это часть моего Helper класса, содержащего проблемы.

public static void display(ArrayList<String> shapes) throws IOException, FileNotFoundException{

    java.util.List<String> list = Arrays.asList("rectangle", "circle","triangle");


    for(int i = 0; i<list.size(); i++)
        switch (list.get(i).toLowerCase())
        {
        case "rectangle":
            Rectangle rectangle = new Rectangle();
            rectangle.name = list.get(i+1);
            rectangle.setWidth(Double.valueOf(list.get(i+2)));
            rectangle.setLength(Double.valueOf(list.get(i+3)));
            System.out.print(rectangle);
            i = (i+3);
            break;

1 Ответ

1 голос
/ 06 мая 2020

Добавление комментариев для пояснения происходящего. NFE возникает, когда вы пытаетесь установить ширину вашего прямоугольного объекта.

public static void display(ArrayList<String> shapes) throws IOException, 
FileNotFoundException{

    // index 0 = "rectangle", index 1 = "circle", index 2 = "triangle"
    java.util.List<String> list = Arrays.asList("rectangle", "circle","triangle");

    // on the first iteration i = 0
    for(int i = 0; i<list.size(); i++)
        // i is 0 so list.get(i).toLowerCase() = "rectangle"
        switch (list.get(i).toLowerCase())
        {
        // since switch (list.get(i).toLowerCase()) evaluates to "rectangle" we enter 
        // this case statement 
        case "rectangle":
            Rectangle rectangle = new Rectangle();
            // i is 0 so list.get(i+1) = "circle", this probably isn't desired 
            // behavior
            rectangle.name = list.get(i+1);
            // i is 0 so list.get(i+2) = "triangle", "triangle" can't be converted to 
            // a double because it's not a number a NumberFormatExpection is thrown
            rectangle.setWidth(Double.valueOf(list.get(i+2)));
            // i is 0 so we can't determine what element is in the list at index 3 
            // because it doesn't exist an ArrayIndexOutOfBoundsException is thrown
            rectangle.setLength(Double.valueOf(list.get(i+3)));
            System.out.print(rectangle);
            // not sure what this is doing
            i = (i+3);
            break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...