我正在编写一些代码,用于练习我目前正在完成的一本书,我偶然发现了一个问题,同时将一些工作代码重写为更具可读性的代码。
问题
我有方法A,它调用方法B,传递一个int值(例如int value = 5)。我希望B查看int值,如果它是> 0,则减1(例如:int value = 4)并返回布尔值true
如果int值是>但是我也希望更改B中的int值来影响A中的原始int值。因为这在带有原语的java中不起作用,我认为如果我通过Integer
,我的问题就会在这里得到解决。
示例代码
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);
}
}
我想要的是返回5 - false - 4.这会返回:
5
false
5
为什么这不起作用
显然,如果传递包含对象引用的变量var1,则不会将var1但它的副本var2 == var1传递给新方法。因此,新方法中对var2的更改不会影响var1。
问题
我如何找到解决办法?
我想避免的解决方案
remainder
1)我想避免,因为我目前正试图尽可能避免使用静态变量。 2)我想避免,因为在我看来,编码很糟糕。
答案 0 :(得分:1)
制作方法以返回剩余价格,如:
private static Integer setRemainder(Integer remainder){
if (remainder > 0) {
remainder = remainder - 1;
}
return remainder;
}
在打印之前添加电话:
remainder = setRemainder(remainder);
答案 1 :(得分:0)
它也不是一个好的设计,但你可以返回一个数组:
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);
}
正如评论中mrjink所建议的那样,您可以使用AtomicInteger。谢谢mrjink!我还学到了一些新东西:)
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);
}
答案 2 :(得分:-1)
这是我提出的解决方案:
public class JavaApplication1 {
static int remainder = 0;
public static void setRemainder(int value){
remainder = value;
}
private static boolean isRemainder0() {
boolean is0 = true;
if (remainder > 0) {
remainder = remainder - 1;
is0 = false;
}
return is0;
}
public static void main(String[] args) {
setRemainder(5);
System.out.println(remainder);
System.out.println(isRemainder0());
System.out.println(remainder);
}
}
解决方案是您想要看到的: 五 假 4