reference - java change an Integer in an external method and have it affect original method -


i'm writing code exercise of book i'm working through on own , stumbled on problem while rewriting working code more readable.

the problem

i have method calls method b, passing int value (e.g. int value = 5). want b @ int value , if >0, decrement 1 (e.g.: int value = 4) , return boolean true if int value > 0. want change of int value in b affect original int value in a. since not work in java primitives, thought problem solved here if passed integer.

example code

public class test {     private static boolean isremainder0(integer remainder) {         boolean is0 = true;         if (remainder.intvalue() > 0) {             remainder = remainder.intvalue() - 1;             is0 = false;         }         return is0;     }      public static void main(string[] args) {         integer remainder = 5;          system.out.println(remainder);         system.out.println(isremainder0(remainder));         system.out.println(remainder);     } } 

what want return 5 - false - 4. return:

5 false 5 

why not work

apparently if pass variable var1 containing object reference, not pass var1 copy var2 == var1 of new method. therefore changes var2 in new method not affect var1.

the question

how find way around it?

solutions want avoid

  1. using static variable remainder
  2. writing custom object containing boolean , changed int value of "remainder"
  3. solutions requiring me instantiate "test"
  4. solutions requiring me lose return of isremainder0

1) want avoid because i'm trying avoid using static variables whenever possible. 2) want avoid because seems me bad coding.

it's not design, can return array:

private static object[] isremainder0(integer remainder) {     boolean is0 = true;     if (remainder.intvalue() > 0) {         remainder = remainder.intvalue() - 1;         is0 = false;     }     return new object[]{is0, remainder}; }  public static void main(string[] args) {     integer remainder = 5;      system.out.println(remainder);     object[] result = isremainder0(remainder);     system.out.println(result[0]);     remainder = (integer)result[1];     system.out.println(remainder); } 

as suggested mrjink in comment, can use atomicinteger. mrjink! learned new :)

private static boolean isremainder0(atomicinteger remainder) {     boolean is0 = true;     if (remainder.intvalue() > 0) {         remainder.decrementandget();         is0 = false;     }     return is0; }  public static void main(string[] args) {     atomicinteger remainder = new atomicinteger(5);      system.out.println(remainder);     system.out.println(isremainder0(remainder));     system.out.println(remainder); } 

Comments

Popular posts from this blog

commonjs - How to write a typescript definition file for a node module that exports a function? -

openid - Okta: Failed to get authorization code through API call -

thorough guide for profiling racket code -