【问题标题】:How to enter a LocalDate value into BlueJ "Create Object" dialog box如何在 BlueJ“创建对象”对话框中输入 LocalDate 值
【发布时间】:2018-02-03 12:04:47
【问题描述】:

我没有尝试将日期格式化为 YYYY-MM-DD 或 dd/MM/YYYY。我问的是 LocalDate 的文字格式。

我刚开始学习 Java,我正在使用这个名为 BlueJ 的 IDE。我想创建一个测试方法。

屏幕截图将显示我正在尝试做的事情

现在,从构造函数中我们知道它需要一个 int、LocalDate 和一个 double。我在网上搜索了一下,发现

https://www.javabrahman.com/java-8/java-8-working-with-localdate-localtime-localdatetime-tutorial-with-examples/

java.time.LocalDate:LocalDate 实例保存一个没有时间的日期 区域,在 ISO-86011 日历系统中。 LocalDate 具有默认格式 'YYYY-MM-DD' 如'2016-12-12'。

所以我会在 10001 中为 testID 输入一个正常数字,而 double 则类似于 50.5 我也知道要注册一个字符串(如果需要),我需要将它包含在“字符串”中

但是我已经尝试了各种方法来输入日期,但我会得到一个错误

2018-05-30,30-05-2018,30/05/2018 会给我

Error: incompatible types: Int cannot be converted to java.time.LocalDate

“30/05/2018”另一方面会给我

Error: Incompatible types: java.lang.String cannot be converted to java.time.LocalDate

如果我尝试 30.05.2018 它会说

Error: ';' expected

如果我尝试“2018-05-30”,它会说

Error: unclosed character literal

我没有办法尝试它。所以如果你能告诉我应该如何把它放在那里,那就太好了。

我只是真的需要知道 BlueJ 希望我如何输入它。因为网上BlueJ的资源太少了。


代码:

import java.time.LocalDate;
import java.util.ArrayList;
/**
 * Write a description of class TestPaper here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class TestPaper
{
    // instance variables - replace the example below with your own
    private int testID;
    private LocalDate testDate;
    private double testMarks;
    private ArrayList<MCQ> MCQDetails;

    /**
     * Constructor for objects of class TestPaper
     */
    public TestPaper(int testID, LocalDate testDate, double testMarks)
    {
        this.testID = testID;
        this.testDate = testDate;
        this.testMarks = testMarks;
        MCQDetails = new ArrayList<MCQ>() ; 
    }

/**
 * Accessor Method getTestID to get the testID
 *
 * @return int value of the choice ID
 */
public int getTestID(){
    return testID;
}

/**
 * Mutator Method to set the testID
 * 
 *  @param int format of the testID to set
 */
public void setTestID(int testID){
    this.testID = testID;
}

/**
 * Accessor Method getTestMarks to get the Test Marks
 *
 * @return double value of the test marks 
 */
public double getTestMarks(){
    return testMarks;
}

/**
 * Mutator Method to set the testMarks
 * 
 *  @param String format of the choice Description to be set
 */
public void setTestMarks(double testMarks){
    this.testMarks = testMarks;
}

    /**
 * Accessor Method getTestDate to get the testDate
 *
 * @return LocalDate value of the testDate
 */
public LocalDate getTestDate(){
    return testDate;
}

/**
 * Mutator Method to set the testDate
 * 
 *  @param LocalDate format of the testDate to set
 */
public void setTestDate(LocalDate testDate){
    this.testDate = testDate;
}

/**
 * Method addMCQ will allow users to add a MCQ Object to the list of MCQ
 *
 * @param addMCQ a MCQ Object
 * @return boolean will return true if it is successfully added or false if not
 */
public boolean addMCQ(MCQ MCQName)
{
    return MCQDetails.add(MCQName);
}

/**
 * Method removeMCQ to remove an MCQ object from the Arraylist
 *
 * @param MCQName A parameter of type MCQ 
 */
public void removeMCQ(MCQ MCQName)
{
    MCQDetails.remove(MCQName);
}

/**
 * Method listMCQ to return a list of MCQ arraylist
 *
 * @return The return value of MCQDetails (MCQ Arraylist)
 */
public ArrayList<MCQ> listMCQ()
{
    return MCQDetails;
}

    public MCQ findMCQ(int MCQID)
{
    for(MCQ m : MCQDetails)
    {
        if(m.getQuestionID() == MCQID)
        {
            return m;
        }
    }
    return null;
}

【问题讨论】:

  • 实现这一切的代码在哪里?
  • 我现在就添加它,真的只是一个简单的程序。
  • 我不使用bluej,所以不确定它接受什么样的表达。你能输入像LocalDate.of(2018, 5, 30)这样的代码吗?还是字符串"2018-05-30"(不确定您是否已经尝试过双引号)?
  • 只是另一个细节:日期has no format。像LocalDate 这样的类只是保存 值(在这种情况下,它具有年、月和日值),但日期本身根本没有格式。相同的日期可以以多种不同的格式表示May 30th 20182018-05-3030/05/18 是不同的格式,但都表示相同的日期。日期对象只保存值,您可以选择您想要表示的任何格式。
  • 当你打印一个LocalDate,它隐式调用toString(),默认选择yyyy-MM-dd格式,这是一个ISO 8601 format,但正如我所说在前面的评论中,这只是格式化日期的众多可能方法之一(尽管 value 始终保持不变)。告诉 “日期有格式” 是错误且具有误导性的。

标签: java bluej localdate


【解决方案1】:

包含包

正如 cmets 中所讨论的,解决方案是添加创建 LocaDate 的代码,但 bluej 需要带有包前缀“java.time”的完全限定类名。

java.time.LocalDate.of(2018, 5, 30)

不知道为什么它不适用于LocalDate.of(...)(即使导入了正确的类),但至少这是有效的。


另一个细节:a date has no format。像LocalDate 这样的类只保存值(在这种情况下,它有年、月和日的值),但日期本身根本没有格式。相同的日期可以用多种不同的格式表示:May 30th 20182018-05-3030/05/18 是不同的格式,但都表示相同的日期。日期对象只保存值,您可以选择您想要表示的任何格式。

当您打印LocalDate 时,它会隐式调用toString(),默认情况下会选择yyyy-MM-dd 格式,这是ISO 8601 格式,但正如我所说,这只是众多可能的格式化方式之一一个日期(尽管该值始终保持不变)。告诉 “日期有格式” 是错误的且具有误导性。

【讨论】:

  • 是的,我不知道为什么 BlueJ 必须将其视为 java.time.LocalDate.of(2018, 5, 30) 但嘿,我很高兴它起作用了。我花了几个小时才弄清楚。再次感谢
【解决方案2】:

尝试在调用中转换LocalDate,如:

TestPaper (2018-05-30, LocalDate.parse("2018/05/30"), 30/05/2018);

您可以使用 LocalDate 中的其他静态方法。有关更多示例,请参阅here

从您上面的评论中,不要忘记您的导入:

import java.time.LocalDate;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多