-3

重複の可能性:
初級 Java - 静的エラー

public class HelloWorld {
    public static void main(String [] args) {
        char[] b = {'a', 'b', 'a', 'c'};
        int p = 4;
        deleteRepeats(b, p);
    }

    public void deleteRepeats(char[] a, int size) {
        int currentElement;
        currentElement = 0;
        do {
            for (int i = currentElement; i < size-1; i++) {
                if (a[currentElement] == a[i+1]) a[i+1] = ' ';
            }
            currentElement++;
        } while (currentElement < size-1);
    }
}

エラーが発生します:

非静的メソッド deleteRepeats(char[],int) は静的コンテキストから参照できません deleteRepeats(b,p);

誰かがこれが何を意味するのか教えてもらえますか?

メインメソッドから「静的」を削除しようとしましたが、エラーが発生しました:

スレッド「メイン」での例外 java.lang.NoSuchMethodError: main.

前もって感謝します

4

2 に答える 2

0

クラスメソッドdeleteRepeatsにする必要があります:

//Note the "static"
public static void deleteRepeats(char[] a, int size) {
    //...
}

クラスメソッドは、呼び出すオブジェクトがなくても呼び出すことができます。なしで宣言されたメソッドはインスタンス メソッドstaticと呼ばれ、オブジェクトで呼び出す必要があります。

public class HelloWorld{
    private int instanceField = 10;
    private static int classField = 30;
    //Main is initially invoked without creating an object
    public static void main(String [] args){
        //So it is only possible to call methods that do not require an object,
        classMethodExample();
        //until an object is created...
        HelloWorld helloWorldObject = new HelloWorld();
        //at which point it becomes possible to call
        //member functions on that object
        helloWorldObject.instanceMethodExample();
        //Modify "helloWorldObject", and call instanceMethodExample again.
        helloWorldObject.instanceField = 20;
        helloWorldObject.instanceMethodExample();
    }
    public static void classMethodExample() {
        //Not invoked on an object, so cannot access instanceField
        //Can access classField
        System.out.println(classField); //prints "30"
    }

    public void instanceMethodExample() {
        //Can access instanceField within helloWorldObject
        System.out.println(instanceField); //prints "10" on the first call,
                                           //"20" on the second call
        //Can also access classField
        System.out.println(classField); //prints "30"
    }

}
于 2012-11-01T04:39:39.027 に答える
0

Java標準の方法である静的フォームのメインメソッドを削除することはできません。あなたはそれを削除することができます。それは単なる方法です。プログラムを実行できませんでした。

あなたと話すために

 public void deleteRepeats(char[] a, int size) 

方法

1)静的にしてメインメソッドで呼び出すことができます

 public static  void deleteRepeats(char[] a, int size) 

今あなたの主な方法、

  public static void main(String [] args){
         char[] b = {'a', 'b', 'a', 'c'};
        int p=4;
        deleteRepeats(b,p);
    }   

2) または、deleteRepeats メソッドをそのまま使用し、そのオブジェクトを作成して main メソッドを呼び出すことができます。

この上

public static void main(String [] args){
   HelloWorld hello = new HelloWorld();
         char[] b = {'a', 'b', 'a', 'c'};
        int p=4;
        hello.deleteRepeats(b,p);
    }   
于 2012-11-01T04:57:08.143 に答える