好吧......所以我做了很多试验和错误...而且我似乎无法将我的usFormat方法称为我的主要方法,而且我认为我几乎搞砸了整个事情大声笑。 。 你能帮忙的话,我会很高兴。只是......请在初级阶段。
class Date {
String date;
String day;
String month;
String year;
StringTokenizer st;
Scanner sc = new Scanner (System.in);
//instance vars go here
public Date (String date){
while (sc.hasNextLine()) {
st = new StringTokenizer (sc.nextLine());
this.month = st.nextToken();
this.day = st.nextToken();
this.year = st.nextToken();
}
} //end constructor
public String usFormat () {
return month + " " + day + "," + year;
} //end usFormat
public String euFormat () {
return null;
} //end euFormat
public static void main (String[] args){
Date usFormat = new Date (date);
}
}
答案 0 :(得分:2)
由于您从static method
调用方法,因此您还需要将该方法(usFormat()
和euFormat()
)设为静态。
public static String ...
静态基本上意味着您不需要该类的实例。所以..你不需要一个实例来运行main
但是你需要一个实例来调用usFormat()
(因为它不是静态的)。那不行。因此错误。
如果您不想将这些方法设置为静态,请考虑将代码移出主类并转移到另一个类中。您可以使用main中的new
创建此类的实例(这也适用于给定的类,如果您也需要(new Date()).usFormat()
)。
答案 1 :(得分:1)
通过将变量声明为与方法相同的名称,不要在对象上调用方法。这就是你如何调用方法(并输出它)。
Date d = new Date("a string"); // You don't seem to be using the argument anyways.
String formattedDate = d.usFormat();
System.out.println(formattedDate);
此外,您甚至不使用Date
构造函数的参数。只需删除String date
参数即可,您可以在调用构造函数时删除"a string"
。
答案 2 :(得分:0)
您定义了一个名为Date的实例类,因此您只需执行以下操作:
public static void main (String[] args){
Date usFormat = new Date (date);
System.out.println(date.usFormat());
}
无需对Date
类的任何方法进行静态处理。
答案 3 :(得分:0)
另一种方法是在main方法中创建Date实例,例如myDate = new Date("");
然后执行myDate.usFormat();
答案 4 :(得分:0)
要从static method
调用非方法,您必须执行以下操作之一:
1)实例化定义非静态方法的类。
Date usFormat = new Date (date);
System.out.println(date.usFormat());
2)制作非静态方法static
public static ....
我建议你使用第一个选项,因为第二个选项需要更多的重新分解。
答案 5 :(得分:0)
非静态方法也称为实例方法,即它们需要类的实例。
实例或对象是您使用关键字new
创建的。例如,类就像汽车,物体就像你驾驶的特定汽车。
因此,要调用该方法,您必须执行以下操作:
public static void main (String[] args){
Date usFormat = new Date (date);
String formattedDate = usFormat.euFormat();
}
答案 6 :(得分:0)
在您的代码中,静态/非静态方法没有任何问题。只有一些拼写错误:
class Date {
String date;
String day;
String month;
String year;
Scanner sc = new Scanner (System.in);
//instance vars go here
public Date (String date){
StringTokenizer st= new StringTokenizer (date, " ");
this.month = st.nextToken();
this.day = st.nextToken();
this.year = st.nextToken();
} //end constructor
public String usFormat() {
return month + " " + day + "," + year;
} //end usFormat
public String euFormat() {
return null;
} //end euFormat
public static void main (String[] args){
Date usFormat = new Date ("20 10 2013");
}
}
但是,关于你的问题,对于调用静态方法,你不需要该类的实例。
答案 7 :(得分:-2)
将日期定义为静态。 static String date;
你不能从静态方法主