我的遞歸函數在我的程序中正在流行。我正在構造一個構造一個相對簡單的對象數組並使用特定值填充它們的方法。即對象1具有這些值3,2,5,6,7,對象2具有這些值; 4,5,6,4,5。等等爲什麼我的遞歸失敗?
遞歸進來時,我有不同的方法,不同的東西的函數的不同部分。如下圖所示:
objectConstructor(Object foo, int switcherVar){
if(switcherVar == 1){
//terminating condition leave method
return 1;
} else {
if(switcherVar == 2){
//do something
objectConstructor(object foo, 1)
}
}
return 0;
}
當我檢查我的返回值,我得到一個0。說我實際上做的方法中的東西是不相關的我的遞歸函數和函數重新只是在它到底罵當它應該跳轉到終止條件時,它會下降。從我的理解問題是我格式化我的遞歸函數的方式。
下面是實際的代碼它是一個給飛機座位賦值的飛機座位構造函數,就像它被佔用和什麼一樣。上述內容更容易閱讀,但如果我的語法關閉,那也可能是問題。
private int airplaneSeatConstructor(Airplane airplane, String className, int numberOfSeats){
/*Airplane Seat Creator, loops through the seats and attaches credentials to them based on the type of plane
* being formed.*/
//currently only one plane type. 777.
//777 seat number 257
//does have a first class section.
System.out.println("iteration");
if(className.equals("TERM")){
return 1;
}else {
if (className.equals("FIRST")) {
for (int x = 0; x < numberOfSeats; x++) {
airplane.getSeats()[x].setOccupied(false);
airplane.getSeats()[x].setFirstClass(true);
airplane.getSeats()[x].setBusinessClass(false);
if ((x % 4) == 0 || (x % 4) == 3) {
airplane.getSeats()[x].setWindowseat(true);
airplane.getSeats()[x].setAisleSeat(false);
} else {
airplane.getSeats()[x].setAisleSeat(true);
airplane.getSeats()[x].setWindowseat(false);
}
}
System.out.println("in first");
airplaneSeatConstructor(airplane, "BUSINESS", 40);
}
if (className.equals("BUSINESS")) {
for (int x = 0; x < numberOfSeats; x++) {
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + x].setBusinessClass(true);
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + x].setFirstClass(false);
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + x].setOccupied(false);
}
System.out.println("in business");
airplaneSeatConstructor(airplane, "ECONOMY", 209);
}
if (className.equals("ECONOMY")) {
for (int x = 0; x < numberOfSeats; x++) {
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + airplane.getNumberOfSeatsPerClass()[1] + x].setBusinessClass(false);
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + airplane.getNumberOfSeatsPerClass()[1] + x].setFirstClass(false);
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + airplane.getNumberOfSeatsPerClass()[1] + x].setOccupied(false);
}
System.out.println("in economy");
airplaneSeatConstructor(airplane, "SPECIAL", 26);
}
if (className.equals("SPECIAL")) {
System.out.println("in special");
airplaneSeatConstructor(airplane, "TERM", 273);
}
}
return 0;
}
我的打印行都打了,但我仍然從我的返回值0。
我使用遞歸的唯一原因是更好地理解它。但你的方式更有意義。我的思考過程是有一個功能來設置初始座位值。謝謝,這有助於我的代碼的整體設計。 – gemini88mill
也,當我嘗試刪除我在結束時返回0。 Intellij給我一個錯誤。 – gemini88mill
IntelliJ抱怨你在最後刪除了「return 0」,因爲你已經聲明你的函數返回一個整數。我也複製和粘貼,並沒有意識到這一點。如果你不需要從你的函數返回值,只需放置「void」而不是返回類型。 – Baltasarq