2012-04-16 99 views
3

我剛剛開始編程,我想用書做練習,但是我做不到。這是我的問題:Java'this'關鍵字

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

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

正如你肯定已經猜到,它不工作,我要問你如何讓outputed整數由一個一個增加,但使用關鍵字「本」。

對於愚蠢的問題感到遺憾和遺憾。

+2

您在這裏有許多基本的誤解,因此不太可能你就會明白最的答案。這也有點不清楚你想在這裏做什麼。你想創建一個包含一個內部整數的類,它可以用'increment()'方法遞增嗎? – 2012-04-16 13:23:12

回答

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()); 
    } 
} 
+1

'return a + 1;'=>'return ++ a;'會有意義,或者它不再是一個增量,它是一個returnOne。 – assylias 2012-04-16 13:26:18

+0

@assylias:評論中的錯誤是你避免在產生值的表達式中使用'++'的一個很好的理由。你的代碼返回'a'的舊值,而不是遞增值。 – 2012-04-16 13:27:45

+0

@MarkPeters哈哈 - 真實!編輯。 – assylias 2012-04-16 13:28:01

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

} 
0

您使用運營商+您當前對象(this)。 java中不支持運算符重載。

+0

OP不太可能理解你在說什麼。 – 2012-04-16 13:25:20

-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()); 
} 
} 
+2

'a.increment()'?真? ;) – assylias 2012-04-16 13:23:45

+0

你是對的,編輯。沒有注意到這一部分。 – pcalcao 2012-04-16 13:24:42

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()); 
} 
} 
+0

這個關鍵字如何在後端內部工作? – 2015-04-07 09:40:09

2

Java中的this關鍵字是指當前範圍的對象實例。我不認爲這是你在這種情況下尋找的。

在你的例子中,a不是類increment的對象,它是原始的int。爲了使用您定義的.increment()函數,它必須是increment類型的對象。

可能是您正在尋找的一個選項是以下。

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型,其內部包含一個整數。其增量方法遞增該內部整數,然後返回該數字。

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元。

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)); 
    } 
} 
+0

哦,對不起,我忘了這麼做:P會編輯它 – aquatorrent 2012-04-16 13:41:27