我在创建数组或对象(具有多个字段)并将其发送到数组列表时遇到问题。任何帮助将不胜感激。我花了几个小时浏览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 :(得分: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()
的默认基本实现,它产生那些带有内存地址的字符串。
根据你的描述,我猜你有一个粗略的工作实现,但遇到了这个问题,并最终改变(并打破)一堆其他无关的东西来尝试修复它。