Ошибка метода получения / установки. Не удается найти символ

#java #oop

#java #ооп

Вопрос:

Я получаю следующую ошибку:

Строка 13, не удается найти символ — System.out.println(getDirection(room1)); (со стрелкой, указывающей на room1). Символ: переменная комната 1 местоположение: класс ArtRecord.

По сути, то, что пытается сделать код, это перейти к методу getDirection . И получите направление room1, которое было задано в setDirection .

 import java.util.Scanner;
class ArtRecord
{
    public static void main (String[] param)
    {
        Scanner reader = new Scanner(System.in);

        createandprintsart();
        String location = askwhere();
        if (location == "Room 1"){
            System.out.println(getDirection(room1)); //#ERROR FOUND ON THIS LINE
        }
    }

    public static void createandprintsart()
    {
        Art room1 = new Art();
        Art room2 = new Art();
        Art room3 = new Art();
        Art room4 = new Art();

        //System.out.println(getDirection(room2));
        room1 = setDirection(room1, "To your left is a painting by");
        room2 = setDirection(room2, "Ahead of you is a painting by");
    }

    public static String askwhere()
    {
    Scanner reader = new Scanner(System.in);
    System.out.println("What room are you in?");
    System.out.println("Room 1");
    System.out.println("Room 2");
    System.out.println("Room 3");
    System.out.println("Room 4");
    String locationvalue = reader.nextLine();
    return locationvalue;
    }

    public static void doStuff(Art room)
    {

    }


    public static Art setDirection(Art room, String direction)

    {
        room.direction=direction;
        return room;
    }    

    public static String getDirection(Art room)

    {
        return room.direction;
    }

}

class Art
{
    String direction;
    String artist;
    String title;
    int year;
    int height;
    int width;

}
 

Спасибо

Комментарии:

1. @c650 Не могли бы вы уточнить, пожалуйста.

2. @c650 Он не будет компилироваться, так как println это поможет?

Ответ №1:

room1 определяется как локальная переменная в createandprintsart() . Таким образом, он недоступен из вашей main функции. Возможно, вместо этого вы могли бы создать static переменные экземпляра rooms?

Также обратите внимание, что вы не должны сравнивать строки с == , а скорее с String.equals(String str) .

Комментарии:

1. Спасибо за ответ.

2. Спасибо за ответ. Как мне превратить комнаты в статические переменные экземпляра?

3.Спасибо за ответ. Как мне превратить комнаты в статические переменные экземпляра?

4. Боже, я так плохо использую этот веб-сайт. @c650. Спасибо за ответ. Как мне преобразовать комнаты в статические переменные экземпляра?

5. Вы можете объявить их как private Art roomX в верхней части вашего ArtRecord класса. Кроме того, вы можете использовать private Art[] rooms (массив), чтобы упростить вашу проблему. Кроме того, вы должны сделать Art переменные экземпляра вашего класса закрытыми и использовать методы для управления ими. @Haque

Ответ №2:

Пара вещей. Вы пытаетесь получить доступ к объекту room1 , которого нет в области действия функции main() . Таким Art образом, объекты класса должны быть объявлены в области видимости класса. Во-вторых Art , объекты класса также должны быть статическими, чтобы к ним можно было получить доступ из main функции.

Наконец, вы не можете сравнивать строки в java с помощью == операторов. Вы должны использовать .equals , и вы также можете избежать создания scanner объектов для каждой функции, переместив ее в оценку класса.

 class ArtRecord {

    static Art room1;
    static Art room2;
    static Art room3;
    static Art room4;
    static Scanner reader = new Scanner(System.in);

    public static void main(String[] param) {
        String next = reader.next();

        createandprintsart();
        String location = askwhere();
        if (location.equals("Room 1")) {
            System.out.println(getDirection(room1)); //#ERROR FOUND ON THIS LINE
        }
    }

    public static void createandprintsart() {
        room1 = new Art();
        room2 = new Art();
        room3 = new Art();
        room4 = new Art();

        //System.out.println(getDirection(room2));
        room1 = setDirection(room1, "To your left is a painting by");
        room2 = setDirection(room2, "Ahead of you is a painting by");
    }
    ...
}