3

私はプログラミングを始めたばかりで、本から演習を作成したいのですが、できません。それが私の問題です:

public class increment {
    int increment() {
        return this + 1; // aka this++
    }

    public static void main(String[] args) {
        int a = 0;
        System.out.println(a.increment());
    }
}

あなたがすでに推測しているように、それは機能しません。キーワード「this」を使用して、出力された整数を1ずつインクリメントする方法をお尋ねしたいと思います。

ばかげた質問をして申し訳ありません。

4

8 に答える 8

6

メソッドのようにクラスに名前を付けるのは奇妙です。私はあなたがこれを望んでいたと思います:

public class Counter {

int val;

 public Counter (int start) {
   val = start;
 }
 public void increment() {
    val ++;
 }
 public String toString () {
   return Integer.toString (val);
 }

 public static void main(String[] args) {
    Counter counter = new Counter (0);
    counter.increment ();
    System.out.println(counter.toString ());
 }
}
于 2012-04-16T13:26:01.790 に答える
4

thisオブジェクト(現在のオブジェクト)です。それを「インクリメント」することはできません。

それを行う方法は次のとおりです。

public class Increment {
    int a = 0;
    int increment() {
        return a + 1; 
        // or: return this.a + 1;
        // or: a++; return a; if you want a to be incremented from now on
    }

    public static void main(String[] args) {
        Increment inc = new Increment();
        System.out.println(inc.increment());
    }
}
于 2012-04-16T13:21:19.387 に答える
2

Javaのthisキーワードは、現在のスコープのオブジェクトインスタンスを参照します。この場合、それはあなたが探しているものではないと思います。

あなたの例でaは、はクラスのオブジェクトではなく、incrementプリミティブintです。定義した関数を使用するには.increment()、タイプがのオブジェクトである必要がありますincrement

あなたが探しているものかもしれない1つのオプションは次のようになります。

public class Increment { //Java likes capitalized class names
    private int myInt;    

    public Increment(int a) { //constructor
        myInt = a;
    }

    public int increment() {
        return ++myInt;
    }    

    public static void main(String[] args) {
        Increment a = new Increment(0);
        System.out.println(a.increment());
    }

}

この例では、increment内部に整数を含むタイプの新しいクラスを作成します。そのincrementメソッドは、その内部整数をインクリメントしてから、数値を返します。

于 2012-04-16T13:26:38.153 に答える
0

このようにクラスをインクリメントすることはできません。インクリメントできるメンバー変数を使用する必要があります。

public class Test {
    private int var;

    public Test(int i) {
        this.var = i;
    }

    int increment() {
       this.var++;
    }
}

public static void main(String[] args) {
    Test t = new Test(0);
    System.out.println(t.increment());

}
于 2012-04-16T13:21:48.513 に答える
0

+現在のオブジェクトに演算子を使用しています( this)。演算子のオーバーロードはJavaではサポートされていません。

于 2012-04-16T13:22:20.057 に答える
0

次のようなものが機能します。

class MyInteger {
    private int internal;

    public MyInteger( int value ){
        this.internal = value;
    }

    public int incerment(){
        return ++this.internal;
    }
}

public class Increment {

    public static void main(String[] args) {
        MyInteger a = new MyInteger(0);
        System.out.println(a.increment());
    }
}

ご覧のとおり、既存のクラスや のようなプリミティブではなく、独自のクラスのメソッドのみを実装できますint

于 2012-04-16T13:27:54.550 に答える
0

次のような新しいクラスを作成している場合を除いて、これを使用して値を返すことはできないと思います。

class Increment1
{
    private int a;
    public int increment2(int a)
    {
        this.a=a;
        return this.a + 1;
    }
}

public class Increment
{

    static Increment1 b = new Increment1();

    public static void main(String[] args)
    {
        int a = 0;
        System.out.println(b.increment2(a));
    }
}
于 2012-04-16T13:35:24.323 に答える
-1

これは、特定のメンバーではなく、クラスの現在のインスタンスを参照します。

プロパティをインクリメントしたい (私は long または int 型を推測しています)、インクリメント クラスのインスタンスではありません (ちなみに Increment である必要があります)。

次のようなものが機能します。

public class increment {

private int innerValue = 0;

int increment() {
    innerValue+=1
    return innerValue; // aka this++
}

public static void main(String[] args) {
    increment a = new increment()
    System.out.println(a.increment());
}
}
于 2012-04-16T13:23:14.350 に答える