Ihr Problem ist, dass primitive Typen in Java von Wert übergeben werden, nicht durch Referenzen.
Dieser Code wird gedruckt 0
.
Wenn Sie einen "Ausgabeparameter" haben wollen, muss er veränderbar sein, aber int
ist nicht. Sie würden eine Klasse erstellen, die eine Halterung für die ganze Zahl ist:
public class MutableInteger {
private int value = 0;
public void increment() {
value++;
}
public int getValue() {
return value;
}
}
Code Dann würde wie folgt aussehen:
// 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);
}
}
}
Ein weiterer Ansatz ist nur Rückgabewert zu verwenden, um das Ergebnis zurück:
// 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;
}
}
}
auch anstelle String-Parsing/Spalten/Gebäude zu tun, würde ich empfehlen, nur zwei haben int
Parameter für Länge und Breite:
// 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;
}
}
}
Die tatsächliche Ausgabe hat zwei Zeilen: '4' und' 1'. Ich habe keine Ahnung, was Sie tun, was Sie erwarten und was Sie für falsch halten. –
Ich möchte die größte Anzahl möglicher Quadrate in einem bestimmten Rechteck zurückgeben. Bsp .: Rechteck 5X3. Es hat ein Quadrat 3 * 3,2 * 2,1 * 1,1 * 1. Insgesamt 4 Quadrate. Ich habe Ausgabe in else-Anweisung in getNoofSquares-Methode (Es gibt einen Sysout, der 4 druckt). Aber wenn ich nach calee Methode gehe, bekomme ich 1 als Ausgabe statt 4 –