【问题标题】:Initializing ArrayList with user-created objects/input from console使用来自控制台的用户创建的对象/输入初始化 ArrayList
【发布时间】:2016-03-30 15:30:37
【问题描述】:
import java.util.*
public class InheritancePart1
{   
    ArrayList<Date> dates = new ArrayList<Date>();
    dates.set(0, (1, 12, 1998));
    //Syntax error on token ",", Name expected after this token
}

对于这个程序,我有一个由 (int m, int d, int y) 定义的 Date 对象,所以对于 例如 (1, 1, 2000),以及一个名为 LongDate 的 Date 的子类,其定义为 (String monthName, int d, int y) 例如 ("January", 1, 2000)。为简单起见,我省略了这两个类,只展示了 main 方法。

我的问题是我需要创建一个日期类型的数组,然后填充它 包含多个 Date 和 LongDate 对象的数组,然后在这些对象上调用方法 对象。但是当我尝试将 Date 类的对象分配给 ArrayList,我得到如上所示的错误信息。

关于为什么会发生这种情况/我做错了什么的任何想法?我试过做

    dates.set(0, Date(1, 12, 1998));

但我得到了同样的错误信息。另外,我尝试使用扫描仪对其进行初始化,但是 这不起作用,给了我同样的错误信息。

如果有人能在所有这些事情上帮助我,我将不胜感激。

【问题讨论】:

  • 使用dates.add(new Date(year, month, date));
  • 谢谢!我不确定语法,但这有帮助
  • 对象创建是非常基础的东西。我建议你参考Objects tutorial

标签: java arrays inheritance arraylist input


【解决方案1】:

你需要调用构造函数

new Date(year, month date)

另外,请注意您要使用List.add 而不是List.set,因为您是在添加而不是替换元素:

dates.add(new Date(year, month, date));

请注意,yearmonth 参数可能不是您所期望的(这是一个可笑糟糕的 API) - year 是自 1900 年以来的年数; month 是从零开始的,所以一月是零。因此,您需要使用:

dates.add(new Date(1998 - 1900, 12 - 1, 1));

创建一个表示 1998 年 12 月 1 日的日期。

【讨论】:

  • 我在 LongDate 和 Date 类中有方法来处理这个问题。年、月和日不是来自 java.util.date,而是来自输入。我将从这个数组中取出一个对象并将其传递给一个将 1998 年视为 1998 年的方法,而不是 API 所说的。
  • 嗯,这很令人困惑。您正在导入 java.util.Date(通过通配符),而不是指定您有自己的 Date 类。
  • 我这样做是因为我很懒。实际上我只需要 ArrayList 和 Scanner。不过我修好了,谢谢你的意见
【解决方案2】:

您正在使用日期列表,因此您需要使用方法add(...) 并将日期类的实例作为参数传递..

因此,您的代码无法正常工作,因为您试图在列表中放入一些奇怪的东西,甚至不是 Date 类的实例...您正在破坏列表所包含的内容与您要插入的内容之间的合同。 ...

解决方案是添加一个有效的日期对象...

使用日历类的示例:

List<Date> myDateList = new ArrayList<Date>();
myDateList.add(new Date());
final Calendar c1 = GregorianCalendar.getInstance();
c1.set(2014, 3, 30); // March 30th 2014
// Date sDate = c1.getTime();
myDateList.add(c1.getTime());

        // print it
        for (final Date d : myDateList) {
            System.out.println(d);
        }

【讨论】:

  • 注意:不要在月份/天前加上 0 - 你会遇到问题,因为这实际上是一个八进制文字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
相关资源
最近更新 更多