私のプログラムでは、私の再帰関数が低下しています。私は、比較的単純なオブジェクト配列を作成し、それらに特定の値を設定するメソッドを作成しています。すなわちオブジェクト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;
}
は私が実際にこの方法でやっているものは、私の再帰関数とは無関係であると機能がちょうど終わり、それにのろい再IS 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を得ています。
私が再帰を使用している唯一の理由は、それをより良く理解することです。あなたのやり方ははるかに理にかなっています。私の思考プロセスは、最初のシート値を設定する機能を1つ持つことでした。これは私のコードの全体的な設計に役立ちました。 – gemini88mill
また、私は最後に私のリターン0を取り除こうとするとき。 Intellijは私にエラーを与えています。 – gemini88mill
IntelliJは関数が整数を返すと述べているので、最後に "return 0"を削除すると言っています。私もコピー&ペーストし、それについては気づいていませんでした。あなたの関数から値を返す必要がない場合は、戻り値の型の代わりに "void"を入れてください。 – Baltasarq