你的問題的值是原始類型的Java是按值傳遞,而不是通過參考。
public static void increment(int x) {
x++;
}
public static void main(String... a) {
int x = 0;
increment(x);
System.out.println(x);
}
此代碼將打印0
。
如果你想有一個「輸出參數」,它必須是可變的,但不是int
。你將不得不創建一個類,是整數持有人:
public class MutableInteger {
private int value = 0;
public void increment() {
value++;
}
public int getValue() {
return value;
}
}
那麼你的代碼應該是這樣的:
// SOLUTION 1
public class GetSquares {
public static void main(String[] args) {
String rectDimension = "5X3";
MutableInteger noOfSq = new MutableInteger();
getNoofSquares(rectDimension, noOfSq);
System.out.println(noOfSq.getValue());
}
public static void getNoofSquares(String rectDimension, MutableInteger noOfSquares) {
int length = Integer.parseInt(rectDimension.split("X")[0]);
int breadth = Integer.parseInt(rectDimension.split("X")[1]);
noOfSquares.increment();
if (length < breadth) {
rectDimension = String.valueOf(breadth - length) + "X" + length;
getNoofSquares(rectDimension, noOfSquares);
} else if (length > breadth) {
rectDimension = String.valueOf(length - breadth) + "X" + breadth;
getNoofSquares(rectDimension, noOfSquares);
}
}
}
另一種方法是隻使用返回值來返回結果:
// SOLUTION 2
public class GetSquares {
public static void main(String[] args) {
String rectDimension = "5X3";
int noOfSq = getNoofSquares(rectDimension);
System.out.println(noOfSq);
}
public static int getNoofSquares(String rectDimension) {
int length = Integer.parseInt(rectDimension.split("X")[0]);
int breadth = Integer.parseInt(rectDimension.split("X")[1]);
if (length < breadth) {
rectDimension = String.valueOf(breadth - length) + "X" + length;
return 1 + getNoofSquares(rectDimension);
} else if (length > breadth) {
rectDimension = String.valueOf(length - breadth) + "X" + breadth;
return 1 + getNoofSquares(rectDimension);
} else {
return 1;
}
}
}
此外,而不是做字符串解析/分割/建築,我會建議只是有長度和寬度的兩個int
參數:
// SOLUTION 2 (cleaned)
public class GetSquares {
public static void main(String[] args) {
String rectDimension = "5X3";
int length = Integer.parseInt(rectDimension.split("X")[0]);
int breadth = Integer.parseInt(rectDimension.split("X")[1]);
int noOfSq = getNoofSquares(length, breadth);
System.out.println(noOfSq);
}
public static int getNoofSquares(int length, int breadth) {
if (length < breadth) {
return 1 + getNoofSquares(breadth - length, length);
} else if (length > breadth) {
return 1 + getNoofSquares(length - breadth, breadth);
} else {
return 1;
}
}
}
實際輸出有兩行:'4'和'1'。我不知道你在做什麼,你在期待什麼以及你認爲什麼是錯的。 –
我想返回agiven矩形中最大的可能正方形。例如:矩形5X3。它有方形3 * 3,2 * 2,1 * 1,1 * 1。共4個方塊。我在getNoofSquares方法的else語句中獲得了輸出(有一個可以打印4的sysout)。但是,當我去Calee方法,我得到1作爲輸出,而不是4 –