2013-04-20 131 views
1

我是java的初學者,我想知道是否有方法在輸入的主類中更改對象的名稱?例如,我得到這個代碼:使用輸入更改對象名稱

while(!answer.equals("stop")) 
    { 
    //Enters book's information and stores it in the object book1 
    System.out.println("Book-" + count);  
    title = input.next(); 
    author = input.next(); 
    ISBN = input.next(); 
    copies = input.nextInt(); 
    Book book1 = new Book(title,author, ISBN, copies); 
    printLn(""); 
    printLn("Do you wish stop adding books? N || stop");  
    answer = input.next(); 
    } 

我想繼續增加新的書籍,直到我寫停止提示時,但當然不改變它會不斷增加的數據同一個對象的名稱。它是可能的,或者我需要不斷的新書對象有:書等=新的書(書名,作者,ISBN,副本)

「已修正我的代碼」 像凱文提到,數組是主要想法來存儲這些值,但由於它的靜態值它可以是完整的,但我可以使用expandcapacity方法來輸入n-books,並且數組已滿,它將數組擴展爲x大小。謝謝!

+1

你知道列表的概念,數組,設定,收藏? – Juvanis 2013-04-20 22:25:35

+1

爲了完成這項工作,您需要大量'Book'變量。因此,爲了不手動聲明大量未知變量,您可以使用'array'或像'List '這樣的集合''ArrayList ''備份。 – 2013-04-20 22:25:54

回答

7

代碼應該將每本書存儲在列表中,以便稍後可以在代碼中訪問它們。除了標識代碼中的對象之外,這個名稱並不重要。即使您可以更改本地變量的名稱book您的問題仍然存在。

您遇到的問題與範圍和對象實例更相關。當您致電new Book(..)時,您將創建一本書的新實例。這本書範圍的實例僅限於由while循環執行的代碼塊{}。這意味着在循環之外,書的實例是不可訪問的。

爲了訪問外循環書的情況下,你可以在循環外創建了一本書,像這樣:

Book book; 

while(...){ 
    book = new Book(...); 
} 

這種方法的問題是,你正在創建本書的幾個實例,所以這本書的參考文獻將被循環中每次迭代的最新書籍覆蓋。

這就創造了持有多本書的必要性。立即可以想到一個數組,但是數組的大小是靜態的,用戶可以輸入1..n的書。這不會使陣列成爲存儲書籍的好選擇。

這是ListArrayList發揮作用的地方。 A List是一個保存多個對象實例的數據結構。它可以使用add(Object)方法輕鬆擴展。列表的完整描述和一個ArrayList是超出了這個答案的範圍,但我提供以下資源:http://docs.oracle.com/javase/tutorial/collections/

最終解決

List<Book> books = new ArrayList<Book>(); 
    while(!answer.equals("stop")) 
     { 
     //Enters book's information and stores it in the object book1 
     System.out.println("Book-" + count);  

     title = input.next(); 
     author = input.next(); 
     ISBN = input.next(); 
     copies = input.nextInt(); 

     Book book1 = new Book(title,author, ISBN, copies); 
     books.add(book1); 

     printLn(""); 
     printLn("Do you wish stop adding books? N || stop");  
     answer = input.next(); 
    } 

    //Iterating the book list outside the loop 
    for(Book book:books){ 
     //this call may vary depending on the book implementation 
     System.out.println(book.getTitle()); 
    } 
+1

雖然您在這個答案中有一個觀點,但請記住OP中的這些單詞:*我是java *中的初學者。基於此,看起來像OP甚至不知道「ArrayList」如何在幕後工作,所以第一步將教授數組概念並提供數組解決方案。 – 2013-04-20 22:29:17

+0

@LuiggiMendoza我試圖詳細說明集合101 – 2013-04-20 22:42:51

+0

沒有提供課程是的,現在它更好。 +1 – 2013-04-20 22:44:46