#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");
}
...
}