这是我的代码
public class Scale {
public static void main(String[] args) {
int x = 4;
int y = 3;
int faktor = 2;
skaliere(x,y,faktor);
System.out.println(x + " " + y);
}
public static void skaliere(int x, int y, int faktor){
// ?
}
}
我想用faktor改变x和y的比例,而不是使用返回值。只是通过skaliere方法。
答案 0 :(得分:4)
我想用faktor改变x和y的比例,而不是使用返回值。只是通过skaliere方法。
请注意,Java不是通过引用传递,它总是按值传递。
没有任何黑客,只是你不能,因为他们是原始人。如果它们是可变对象,是的,您可以更改其状态。
该hack会使它们变为静态并在该方法中分配值。
答案 1 :(得分:-1)
您可以使用包装这两个值的对象来执行此操作。这是因为对象引用被传递给方法。如果传递一个不可变的原语,它们将永远不会在返回时更改,它只会更改方法中的副本。使用对象,您可以传递包含的值,它将是检索时main方法引用的值。
public static void main(String[] args) {
// org.eclipse.swt.graphics.Point
Point p = new Point(0, 0);
p.x = 4;
p.y = 3;
int faktor = 2;
skaliere(p,faktor);
System.out.println(p.x + " " + p.y);
}
public static void skaliere(Point p, int factor){
p.x *= factor;
p.y *= factor;
}
答案 2 :(得分:-1)
您可以随时制作自己的MutableInteger
课程
class MutableInteger{
private int value;
public MutableInteger(int v){
this.value = v;
}
public int get(){
return value;
}
public void set(int newValue){
this.value = newValue;
}
@Override
public String toString() {
return Integer.toString(value);
}
}
然后在您的代码中使用它:
public static void main(String[] args) {
MutableInteger x = new MutableInteger(4);
MutableInteger y = new MutableInteger(3);
int faktor = 2;
skaliere(x,y,faktor);
System.out.println(x + " " + y);
}
public static void skaliere(MutableInteger x, MutableInteger y, int faktor){
x.set(x.get() *faktor);
y.set(x.get() *faktor);
}
由于您正在创建自己的类,您甚至可以将skaliere
方法移动到MutableInteger中
class MutableInteger{
...
public void skaliere(int faktor){
this.value *=faktor;
}
}
使你的代码看起来像这样:
public static void skaliere(MutableInteger x, MutableInteger y, int faktor){
x.skaliere(faktor);
y.skaliere(faktor);
}
你甚至不再需要静态方法