Зменлівы метад не можа быць прыцягнуты да статычнаму

Добра ... так што я зрабіў шмат спроб і памылак ... і я не магу назваць мой метад 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);

        }
    } 
1
-1. Калі ласка, <�я> Google </я> Ваша паведамленне пра памылку, гэта пакрыта незлічонымі С.О. пытанні і падручнікі ў Інтэрнэце.
дададзена аўтар djechlin, крыніца
Вось ваша дакладна такая ж праблема: stackoverflow.com/questions/7379915/…
дададзена аўтар djechlin, крыніца
@All адказваюць, калі ласка, зачыніце, як дублікат замест дублявання адказаў.
дададзена аўтар djechlin, крыніца

8 адказы

Так як ваш выклік метаду з статычны метад , вам неабходна зрабіць гэты метад ( usFormat() і euFormat() ) статычны занадта ,

public static String ...

Статычны ў асноўным азначае, што вам не патрэбны асобнік класа. Так .. Вам не патрэбны асобнік для запуску асноўны але вам патрэбен асобнік для выкліку usFormat() (бо ён не з'яўляецца статычным). Гэта не будзе працаваць. Адсюль узнікае памылка.

У выпадку, калі вы не хочаце, каб зрабіць гэтыя метады статычнымі, разгледзець пытанне аб пераносе кода з асноўнага класа і ў іншы. Вы можаце стварыць асобнік гэтага класа, выкарыстоўваючы новы у асноўны (гэта будзе працаваць з дадзеным класам таксама, у выпадку, калі вы хочаце занадта (новы Date ()). UsFormat() </код >).

2
дададзена

вызначыць дату як статычныя. <�Код> статычныя радкі дата; вы не можаце спасылацца якая не з'яўляецца статыкай ад статычнага метаду магістральнага

2
дададзена
Звярніце ўвагу, што доступ да пераменным асобніка.
дададзена аўтар djechlin, крыніца

Вы не выклікаць метад аб'екта, абвясціўшы зменную як жа імя, што і метад. Гэта, як вы маглі б назваць метад (і вываду яго).

Date d = new Date("a string"); //You don't seem to be using the argument anyways.
String formattedDate = d.usFormat();
System.out.println(formattedDate);

Акрамя таго, вы нават не выкарыстоўваць аргумент для вашага Дата Канструктар. Проста выдаліце ​​ дата Радок параметр для яго, і вы можаце выдаліць «радок» пры выкліку канструктара.

1
дададзена

Another approach would be to create an instance of Date inside your main method, for example myDate = new Date(""); and then do myDate.usFormat();

0
дададзена

Non-статычныя метады таксама называюць метадам асобніка, гэта значыць яны патрабуюць Асобнік класа. Instance або аб'ект з'яўляецца тое, што вы ствараеце, выкарыстоўваючы ключавое слова новы . Прыкладам з'яўляецца тое, што клас, як аўтамабіль і аб'ект як канкрэтнага аўтамабіля, які вы водзіце.

Такім чынам, для выкліку метаду вы павінны зрабіць наступнае:

  public static void main (String[] args){
    Date usFormat = new Date (date);
    String formattedDate = usFormat.euFormat();
  }
0
дададзена

Для таго, каб выклікаць ня-метад з статычны метад , вы павінны выканаць адно з наступных дзеянняў:

1) Instatiate клас, дзе вызначаны не-статычны метад.

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

2) Make the non-static method static

public static .... 

Я хацеў бы прапанаваць вам выкарыстоўваць першы варыянт, бо другі адзін патрабуе значна больш рэфактарынгу.

0
дададзена

Вы вызначылі клас экзэмпляры з імем даты, так што вы проста павінны зрабіць наступнае:

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

Няма неабходнасці рабіць статычныя любыя метады вашага Дата класа.

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

Тым не менш, аб вашым пытанні, для выкліку статычнага метаду не патрэбны асобнік класа.

0
дададзена