将扫描仪传递给方法

时间:2014-06-18 12:51:11

标签: java class methods

有人能告诉我为什么日期打印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());
}

}  

6 个答案:

答案 0 :(得分:6)

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

public Date(int day, int month, int year) {
    this.day = day;
    this.month = month;
    this.year = year;
}

答案 1 :(得分:6)

这是问题所在:

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

您的构造函数完全忽略其参数,使您的字段保留其默认值。对于int字段,即0。

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

public Date(int day, int month, int year) {
    this.day = day;
    this.month = month;
    this.year = year;
}

或者可能打电话给你的房产:

public Date(int day, int month, int year) {
    setDay(day);
    setMonth(month);
    setYear(year);
}

强烈建议:

  1. 你使类型成为不可变的(删除setter,使类最终,使字段最终)
  2. 你试着思考"年月日"而不是" day month year" (所以重新排序参数)
  3. 验证参数
  4. 您遵循Java命名约定(将DisplayDate更改为displayDate,或者将格式与写入控制权分开,只需覆盖toString
  5. 您完全避免创建自己的日期类型,而是使用java.time中的类型(如果您使用的是Java 8)或Joda Time

答案 2 :(得分:2)

你的构造函数什么都不做:

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

它接受适当的值,但不对它们做任何事情。请注意DisplayDate如何调用您的getter方法:getDay()getMonth()getYear()?这些getter返回的值是类顶部定义的实例变量:daymonthyear。由于这些值从未使用适当的值进行初始化,因此默认为0。

一个更明智的构造函数是:

public Date(int day, int month, int year) {
   this.day   = day; 
   this.month = month;
   this.year  = year;
}

答案 3 :(得分:1)

将您的构造函数编辑为:

public Date(int day, int month, int year) {
    this.day=day;
    this.month=month;
    this.year=year;
}

问题是你以后从未设置过你要求的变量!

答案 4 :(得分:0)

因为Date类的构造函数为空!

将其更改为以下内容,它将起作用:

public Date(int day, int month, int year) {
    this.day = day;
    this.month = month;
    this.year = year;
}

答案 5 :(得分:0)

Date类的构造函数为空,因此在创建新Date对象时不会设置值。