2010-11-02 51 views
0

我有一個小問題我試圖打印位於私有方法中的幾個變量的內容。但我只是不斷找到'不能找到符號'從位於私有方法中的變量讀取

下面是我試圖從(包括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); 
} 
+0

這些方法,它們是否位於'Booking'類中? – aioobe 2010-11-02 16:49:01

回答

4

你可能想要把這些變量作爲member variables,然後乾脆不使用. - 運算符訪問它。

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例如,您可能想擺脫titlefirstNamelastNamebookingNoroomType,並把它們在Booking類代替。然後通過aBooking.getTitle()等訪問它們......

+0

但是,您仍然在printCustomerName變量中遇到問題。 – Prine 2010-11-02 16:44:17

+0

謝謝。更新。 – aioobe 2010-11-02 16:45:18

0

您不能訪問方法的變量,也不能使用方法作爲使用點運算符的類實例。

createBooking.something是非法的,你可以使用方法:createBooking()

+0

是的,我意識到'System.out.println(createBooking.title)''是錯誤的,但我不知道如何閱讀createBooking方法中的內容 – Chris 2010-11-02 16:43:32

0

我完全不明白你想要做什麼。但我想你想要這樣的事情:

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

您的退貨對於無效方法不正確。 – barryred 2010-11-02 17:25:04

+0

啊,是的,thx。更正! – Prine 2010-11-02 17:32:37

3

當你做aBooking = new Booking(...)你創建與所有這些屬性的新Booking對象,並將其在aBooking現場存儲(我猜這是一個領域,因爲它沒有任何地方申報)。這意味着您有一個aBooking字段,其中包含所有這些屬性(假設Booking構造函數保存參數)。因此,要訪問這些字段,請通過aBooking字段。大概是這樣的:

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

,或者,如果你不使用吸氣劑(你應該!):

System.out.println(aBooking.title); 

聲明的變量的createBooking方法停止「現有」內,一旦你離開方法。他們無法以任何方式訪問(幾乎)。

0

你可能要考慮從'void'改變createBooking()方法的返回類型'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... 
}