2012-05-29 61 views
2

所以我试着在网上进行研究,我有一种感觉,就是我的toString(),但它的方式让我无法想象其他任何方式。为什么我会为我的输出获取空值?

我希望能够输出:Lexie-高度:2.6英尺。出生日期:11/5/2009

我的代码如下所示:

import java.util.*; 
class Kid { 
    String name; 
    double height; 
    GregorianCalendar bDay; 
    public Kid() { 
     this.name = "HEAD"; 
     this.height = 1; 
     this.bDay = new GregorianCalendar(1111,1,1); 
    } 

    public Kid (String n, double h, String date) { 
     StringTokenizer st = new StringTokenizer(date, "/", true); 
     n = this.name; 
     h = this.height; 
    } 
    /** 
    public String toString() { 
     return (this.name + ", Height: " + this.height + "ft., Born: " 
     + this.month + "/" + this.day + "/" + this.year); 
    } 
    */ 
    public String toString() { 
     Calendar currentDate = Calendar.getInstance(); 
     return (this.name + ", Height: " + this.height + "ft., Born: " 
     + this.bDay); 
    } 
} //end class 

调用小子类低于

class Driver { 
    public static void main (String[] args) { 
     Kid kid1 = new Kid("Lexie", 2.6, "11/5/2009"); 
     System.out.println(kid1.toString()); 
    } //end main method 
} //end class 
+2

您记号化的输入,但你不从给定的日期构建生日对象 – Mustafa

+2

有几种您的代码存在问题。另一个:你可能是指'this.name = n;'而不是'n = this.name;'。 – assylias

+0

你为什么要做这个.name = n? – user1283885

回答

6

你在你的构造函数表达式是南辕北辙 - 你有n = this.name你应该有this.name = n。同样适用于this.height。此外,您目前没有设置bDay字段。因此,所有的领域确实是null

+0

与'h = this.height'相同的问题,而不是'this.height = h'。 –

+0

是的,显然。没想到有必要明确说明...... –

+0

非常感谢!它有帮助。 – user1283885

0

尝试修改你的构造和BDAY类型:

private static final String DATE_FORMAT = "dd/MM/yyyy"; 
String name; 
double height; 
Date bDay; 

public Kid() { 
    this.name = "HEAD"; 
    this.height = 1; 
    this.bDay = new Date(); 
} 

public Kid (String n, double h, String date) { 
    DateFormat df = new SimpleDateFormat(DATE_FORMAT); 
    this.bDay = df.parse(date); 
    this.name = n; 
    this.height = h; 
} 

public String toString() { 
    DateFormat df = new SimpleDateFormat(DATE_FORMAT); 
    return (this.name + ", Height: " + this.height + "ft., Born: " 
    + df.format(this.bDay)); 
} 
1

试试这个:

public Kid (String n, double h, String date) { 
     StringTokenizer st = new StringTokenizer(date, "/"); 
     this.name = n; 
     this.height = h; 
     this.bDay = new GregorianCalendar(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())); 
    } 
+0

唯一的问题是,格里高利日历希望字符串作为参数,而不是整数...... – user1283885

+1

st.nextToken()返回一个字符串不是int。 –

+0

我的不好,反过来。 编辑:想要三个参数(所有整数) 如此复制一本书: GregorianCalendar(年:int,month:int,dayOfMonth:int) – user1283885

相关问题