2014-03-06 77 views
0

我有麻煩創建一個數組或對象(與多個字段)並將其發送到數組列表。任何幫助將不勝感激。我花了幾個小時仔細查看YouTube上的每個視頻,其中包含對象和數組列表,並且一直未能找到太多幫助。如何將數組發送到數組列表?

程序需要提示用戶選擇一個選項(1. AddItem),然後提示用戶輸入名稱和格式(dvd,vhs)並將這些變量保存在一個數組列表中。我要麼保持存儲在內存中的位置返回給我,要麼創建一個大對象而不是多個對象。

庫:

import java.util.Scanner; 
import java.util.ArrayList; 

public class Library { 

    static ArrayList<Object> items = new ArrayList<Object>(); 
    static int menuOption; 
    static Scanner scan = new Scanner(System.in); 

    public static void main(String args[]) { 
     String title, format; 
     boolean right = false; 

     do{ 
      displayMenu(); 
      if (menuOption == 1){ 
       System.out.println("Enter Title: "); 
       title = scan.next(); 
       System.out.println("Enter format: "); 
       format = scan.next(); 
       addNewItem(title, format); 
      } else {System.out.println(items); 

      } 
     } while (!right); 
    } 

    static int displayMenu(){ 


     System.out.println("Menu: "); 
     System.out.println("1. Add New Item"); 
     menuOption = scan.nextInt(); 

     return menuOption; 
    } 

    static void addNewItem(String title, String format){ 
     MediaItem b = new MediaItem(); 
     b.setTitle(title); 
     b.setFormat(format); 
     items.add(b); 

    } 
} 

MediaItem:

public class MediaItem { 

    String title; 
    String format; 

    MediaItem(){ 
     title = null; 
     format = null 
    } 
    MediaItem(String title, String format){ 
     title = new String(); 
     format = new String(); 
    } 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public String getFormat() { 
     return format; 
    } 
    public void setFormat(String format) { 
     this.format = format; 
    } 
} 
+0

你的代碼中的哪一部分是你正在努力的?請刪除不相關的代碼部分。 – crush

+0

不清楚什麼是錯的,你需要什麼。 – Sanjeev

+1

您的代碼似乎完全不符合您的主題標題。 –

回答

0

我要麼保持有它保存在內存中的位置還給我

我猜你在嘗試使用System.out.println()來打印MediaItem時遇到過這種情況,或者您試圖自動將對象轉換爲字符串。無論您在看到內存地址時採取的方式可能都是正確的方式,您的問題只發生在顯示數據時。

考慮:

MediaItem item = ...; 
System.out.println(item); 

默認情況下,Java不知道如何任意對象轉換爲字符串,當你做這樣的東西,所以它只是吐出類的名稱和內存地址。您可能需要單獨打印領域(例如,Java知道如何顯示String的話),如:

System.out.println("Title: " + item.getTitle() + " Format: " + item.getFormat()); 

或者你可以重寫toString()(在Object聲明)提供自定義字符串轉換:

class MediaItem { 
    ... 
    @Override public String toString() { 
     return "Title: " + title + " Format: " + format; 
    } 
} 

然後你就可以直接打印:

System.out.println(item); 

這是默認的基本實現Object.toString()日。在那裏產生那些有內存地址的字符串。

根據你的描述,我猜你有一個粗略的工作實現,但遇到了這個問題,並最終改變(並打破)一堆其他不相關的東西來嘗試修復它。

+0

非常感謝您的幫助!是的,我知道我已經接近了它想知道它是否與轉換有關。 – YellowSoloCup

+0

@YellowSoloCup順便說一下,如果您使用Eclipse,您可以右鍵單擊代碼,選擇「Source」,然後選擇「Generate toString()」,Eclipse將生成一個合理的toString()函數你包括所有成員字段的值。這非常方便。 –

1

程序將運行,如果你:

1 - 更改線路

static ArrayList<Object> items = new ArrayList<Object>(); 

static ArrayList<MediaItem> items = new ArrayList<MediaItem>(); 

2 - 行

System.out.println(items); 

更改爲

for (MediaItem mi : items) 
{ 
    System.out.println(mi.getTitle() + ", " + mi.getFormat()); 
} 

3 - 插入「;」在行末

format = null 

我在這裏做了,它工作。

+0

非常感謝您的幫助!非常棒! – YellowSoloCup

相關問題