将扫描仪传递给方法

0 java methods class

谁能告诉我为什么日期打印0/0/0
缺少哪部分代码,以便使用Scanner输入的值传递给方法DisplayDate并打印在屏幕上?

import java.util.Scanner;

public class DateClass {

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter day:");
    int day = scanner.nextInt();
    System.out.println("Enter month:");
    int month = scanner.nextInt();
    System.out.println("Enter year:");
    int year = scanner.nextInt();

    Date d = new Date(day,month,year);
    d.DisplayDate();

}

}

class Date {

private int day;
private int month;
private int year;


public Date(int day, int month, int year) {
}

public int getDay() {
    return day;
}

public void setDay(int day) {
    this.day = day;
}

public int getMonth() {
    return month;
}

public void setMonth(int month) {
    this.month = month;
}

public int getYear() {
    return year;
}

public void setYear(int year) {
    this.year = year;
}


public void DisplayDate() {
    System.out.println(getDay() + "/" + getMonth() + "/" + getYear());
}

}  
Run Code Online (Sandbox Code Playgroud)

Bac*_*ash 6

你没有保存你的日,月和年.你应该在构造函数中做到这一点:

public Date(int day, int month, int year) {
    this.day = day;
    this.month = month;
    this.year = year;
}
Run Code Online (Sandbox Code Playgroud)

  • + 1表示正确且比Jon Skeet更快:-) (2认同)

Jon*_*eet 6

这就是问题:

public Date(int day, int month, int year) {
}
Run Code Online (Sandbox Code Playgroud)

构造函数完全忽略其参数,使字段保留其默认值.对于int字段,那是0.

相反,它应该保存值,例如

public Date(int day, int month, int year) {
    this.day = day;
    this.month = month;
    this.year = year;
}
Run Code Online (Sandbox Code Playgroud)

或者打电话给你的房产:

public Date(int day, int month, int year) {
    setDay(day);
    setMonth(month);
    setYear(year);
}
Run Code Online (Sandbox Code Playgroud)

我也强烈建议:

  1. 你使类型不可变(删除setter,使类最终,使字段最终)
  2. 你试着想"年月日"而不是"日月"(所以重新排序参数)
  3. 您验证参数
  4. 您遵循Java的命名约定(变化DisplayDatedisplayDate,或分开写到控制台格式,仅通过重写的关注toString,而不是)
  5. 您完全避免完全创建自己的日期类型,而是使用java.time中的类型(如果您使用的是Java 8)或Joda Time.