Чтение из переменных, которые находятся в приватном методе

У меня небольшая проблема. Я пытаюсь напечатать содержимое нескольких переменных, которые находятся в частном методе. но я просто продолжаю получать "Не могу найти символ"

Ниже приведен код, с которого я пытаюсь прочитать данные (включая println), также я очень новичок в Java.

private void createBooking()
{
     String title;
     String firstName;
     String lastName;
     String bookingNo;
     String roomType;

    System.out.print("Enter title: ");
    title = keyboard.next();
    System.out.print("Enter first name: ");
    firstName = keyboard.next();
    System.out.print("Enter last name: ");
    lastName = keyboard.next();
    System.out.print("Enter booking number: ");
    bookingNo = keyboard.next();
    System.out.print("Enter room type: ");
    roomType = keyboard.next();


    aBooking = new Booking (title, firstName, lastName, bookingNo, roomType);

}

public void printCustomerName()
{
    System.out.println (createBooking.title);
}

5 ответов

Решение

Вы, вероятно, хотите поместить эти переменные как переменные- члены, а затем просто получить к ним доступ, не используя .-оператором.

class BookingClass {

    // You also seem to need the following:
    Booking aBooking;

    String title;
    String firstName;
    String lastName;
    String bookingNo;
    String roomType;

    private void createBooking() {

        System.out.print("Enter title: ");
        title = keyboard.next();
        System.out.print("Enter first name: ");
        firstName = keyboard.next();
        System.out.print("Enter last name: ");
        lastName = keyboard.next();
        System.out.print("Enter booking number: ");
        bookingNo = keyboard.next();
        System.out.print("Enter room type: ");
        roomType = keyboard.next();

        aBooking = new Booking(title, firstName, lastName, bookingNo, roomType);
    }

    public void printCustomerName() {
        System.out.println(title);
        // ...should perhaps be
        // System.out.println(firstName + " " + lastName);
    }
}

Так как вы создаете Booking Например, вы можете избавиться от title, firstName, lastName, bookingNo а также roomType и положить их в Booking класс вместо. А затем получить к ним доступ через aBooking.getTitle() и так далее...

Когда вы делаете aBooking = new Booking(...) вы создаете новый Booking объект со всеми этими атрибутами и хранить его в aBooking поле (я предполагаю, что это поле, поскольку оно нигде не объявлено). Это означает, что у вас есть поле aBooking, которое содержит все эти атрибуты (при условии Booking конструктор сохраняет параметры). Таким образом, для доступа к этим полям вы проходите через aBooking поле. Вероятно, что-то вроде этого:

System.out.println(aBooking.getTitle());

или, если вы не используете геттеры (вы должны!):

System.out.println(aBooking.title);

Переменные, которые вы объявляете внутри createBooking остановка метода "существующего" после выхода из метода. Они недоступны в любом случае (ну, почти).

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

createBooking.something недопустим, вы можете использовать этот метод: createBooking()

Я не совсем понимаю, что ты хочешь делать. Но я думаю, что вы хотите что-то вроде этого:

public String printCustomerName() {
  // This creates the booking object (aBooking)
  createBooking();

  // You can access the firstname lastname like that (I assume that you have a getter method implemented..)
  return aBooking.getFirstName() + " " + aBooking.getLastName();
}

Но с помощью createBooking() вам следует переместиться в другое место. Может быть, в конструктор и вызвать его там..

Вы можете рассмотреть возможность изменения типа возвращаемого значения createBooking() метод из 'void' в 'Booking' и тогда последняя строка станет:

Частное бронирование создатьБронирование ()
{
    ...
    ...

    вернуть новое бронирование (title, firstName, lastName, bookingNo, roomType)``
}

После этого ваш printCustomerName() может выглядеть примерно так:

public void printCustomerName ()
{
    Бронирование бронирования = создатьБуксинг ();
    System.out.println (booking.title); // если заголовок виден, чего, вероятно, не должно быть
    //или же
    System.out.println (booking.getTitle()); // если такой метод существует...
}
Другие вопросы по тегам