2012-04-16 2 views
3

Я только начинаю программировать, и я хотел бы сделать упражнение из книги, но я не могу. Вот моя проблема:Java 'this' keyword

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()'? –

ответ

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

+0

@assylias: ошибка в вашем комментарии является хорошей причиной, по которой вам следует избегать использования '++' в выражении, которое создает значение. Ваш код возвращает старое значение 'a', а не инкрементное значение. –

+0

@MarkPeters Ха-ха - правда! изм. – assylias

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 вряд ли поймет, о чем вы говорите. –

-1

Это относится к текущему экземпляру класса, а не к определенному члену.

Вы хотите увеличить свойство (я предполагаю тип long или int), а не экземпляр вашего класса increment (должен быть, кстати, 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

+0

Вы правы, отредактированы. Не заметил этой части. – pcalcao

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

Как это ключевое слово работает внутри бэкэнд? –

2

this ключевое слово в Java относится к экземпляру объекта текущего прицела. Я не думаю, что это то, что вы ищете в этом случае.

В вашем примере 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, который внутри содержит целое число. Его метод 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

Смежные вопросы