anon
anon

Reputation:

Java 'this' keyword

I'm just beginning in programming and I'd like to make exercise from a book, but I can't. That's my problem:

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

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

As you for sure guessed already, that it doesn't works, I want to ask you how to get outputed integer a incremented by one, but using keyword 'this'.

Regards and sorry for stupid questions.

Upvotes: 3

Views: 534

Answers (8)

Don
Don

Reputation: 1144

You cannot increment a class like this. You have to use a member variable that you can increment.

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

}

Upvotes: 0

aquatorrent
aquatorrent

Reputation: 841

i don't think you can use this to return the value, except if you're making a new class like this:

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

Upvotes: 0

trutheality
trutheality

Reputation: 23455

Something like this will work:

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

You see, you can only implement methods for your own classes, not for existing classes, or for primitives like int.

Upvotes: 0

stefan bachert
stefan bachert

Reputation: 9608

It is strange to name a class like a method. I guess you wanted this:

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

Upvotes: 6

Sam DeHaan
Sam DeHaan

Reputation: 10325

The this keyword in Java refers to the current scope's object instance. I don't think it's what you're looking for in this case.

In your example, a isn't an object of the class increment, it is a primitive int. In order to use the .increment() function you defined, it would have to be an object of type increment.

One option that may be what you're looking for would be the following.

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

}

In this example, we make a new class of type increment, which internally contains an integer. Its increment method increments that internal integer, and then returns the number.

Upvotes: 2

pcalcao
pcalcao

Reputation: 15975

This refers to the current instance of the class, not a particular member.

You want to increment a property (I'm guessing of type long or int), and not the instance of your increment class (should be Increment, by the way).

Something like this would work:

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

Upvotes: -1

shift66
shift66

Reputation: 11958

you are using operator + for your current object (this). Operator overloading is not supported in java.

Upvotes: 0

MByD
MByD

Reputation: 137282

this is an object (the current object). You cannot "increment" it.

A way to do it is:

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

Upvotes: 4

Related Questions