-1

好的......所以我已经做了很多试验和错误......我似乎无法将我的 usFormat 方法调用到我的 main 中,我想我已经把整个事情搞砸了哈哈......任何帮助会好的。只是...请在初学者级别。

 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);

        }
    } 
4

8 回答 8

2

由于您从 a 调用方法static method,因此您也需要将该方法(usFormat()euFormat())设为静态。

public static String ...

静态基本上意味着您不需要该类的实例。所以..您不需要运行实例,main但确实需要调用实例usFormat()(因为它不是静态的)。那是行不通的。因此错误。

如果您不想将这些方法设为静态,请考虑将您的代码移出主类并移至另一个类。您可以使用 in main 创建此类的实例new(如果您也需要,这也适用于给定的类(new Date()).usFormat())。

于 2013-05-24T16:58:45.970 回答
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"调用构造函数的时候就可以去掉了。

于 2013-05-24T17:03:57.583 回答
0

您定义了一个名为 Date 的实例类,因此您只需要执行以下操作:

    public static void main (String[] args){
        Date usFormat = new Date (date);
        System.out.println(date.usFormat());
    }

无需将Date类的任何方法设为静态。

于 2013-05-24T17:01:56.817 回答
0

另一种方法是在 main 方法中创建 Date 的实例,例如myDate = new Date("");,然后执行myDate.usFormat();

于 2013-05-24T17:02:19.677 回答
0

为了从 a 调用非方法static method,您必须执行以下操作之一:

1) 实例化定义了非静态方法的类。

Date usFormat = new Date (date);
System.out.println(date.usFormat());

2)制作非静态方法static

public static .... 

我建议你使用第一个选项,因为第二个需要更多的重构。

于 2013-05-24T17:02:19.757 回答
0

非静态方法也称为实例方法,即它们需要类的实例。实例或对象是您使用关键字创建的东西new。例如,class 就像汽车,object 就像您驾驶的特定汽车。

因此,要调用该方法,您必须执行以下操作:

  public static void main (String[] args){
    Date usFormat = new Date (date);
    String formattedDate = usFormat.euFormat();
  }
于 2013-05-24T17:02:59.080 回答
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");    
    }
} 

但是,关于您的问题,对于调用静态方法,您不需要该类的实例。

于 2013-05-24T17:17:18.813 回答
-2

将日期定义为静态。static String date;您不能从静态方法 main 中引用非静态

于 2013-05-24T17:02:12.113 回答