你如何将数组发送给arraylist?

时间:2014-03-06 04:34:45

标签: java arrays arraylist

我在创建数组或对象(具有多个字段)并将其发送到数组列表时遇到问题。任何帮助将不胜感激。我花了几个小时浏览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;
    }
}

2 个答案:

答案 0 :(得分: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

我在这里做了它并且有效。

答案 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()的默认基本实现,它产生那些带有内存地址的字符串。

根据你的描述,我猜你有一个粗略的工作实现,但遇到了这个问题,并最终改变(并打破)一堆其他无关的东西来尝试修复它。