Чтение из переменных, которые находятся в приватном методе - PullRequest
0 голосов
/ 02 ноября 2010

У меня небольшая проблема. Я пытаюсь напечатать содержимое нескольких переменных, которые находятся в закрытом методе.но я просто продолжаю получать 'Can Not Find Symbol'

Ниже приведен код, из которого я пытаюсь прочитать данные (включая 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 ]

4 голосов
/ 02 ноября 2010

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

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() и так далее ...

3 голосов
/ 02 ноября 2010

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

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

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

System.out.println(aBooking.title);

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

0 голосов
/ 02 ноября 2010

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

private Booking createBooking()
{
    ...
    ...

    return new Booking(title, firstName, lastName, bookingNo, roomType)``
}

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

public void printCustomerName()
{
    Booking booking  = createBooking();
    System.out.println (booking.title); // if title is visible, which it probably shouldn't be
    //or
    System.out.println (booking.getTitle()); // if such a method exists...
}
0 голосов
/ 02 ноября 2010

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

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 () вам следует переместить в другое место.Может быть, в конструкторе и вызвать его там ..

0 голосов
/ 02 ноября 2010

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

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

...