Pythonでコードを書いたところ、実際にうまく動作し、Javaで実装しようとしていましたが、少し問題があります。PythonコードからJavaコードへの変換
def twentyone(nums, stack = [], answer = set()):
for index, num in enumerate(nums):
new_stack = stack + [num]
total = sum(new_stack)
if total == 21:
answer.add(tuple(new_stack))
elif total < 21:
twentyone(nums[index + 1:], new_stack, answer)
return answer
user_input = input()
list_format = [int(x) for x in user_input.split()]
answer = twentyone(list_format)
if len(answer) == 0:
print("No combination of numbers add to 21")
for solution in answer:
print("The values ", end = "")
for number in solution:
print("{} ".format(number), end = "")
print("add up to 21")
、ここでは私のJavaコードは(今のところ)である:それは、このような「1 9 10」として、ユーザからの文字列の入力を受け取り、バックトラッキングを使用して、簡単な21の質問ここで
は、Pythonのコードです
public class TwentyOne {
public static void main(String args[]){
Scanner userInput = new Scanner(System.in);
String stringInput = userInput.nextLine();
ArrayList<Integer> allNum = new ArrayList<>();
for (String num : stringInput.split(" ")){
allNum.add(Integer.parseInt(num));
}
HashSet<ArrayList<Integer>> answer = twentyOne(allNum);
for (ArrayList<Integer> solution : answer){
System.out.print("The values ");
for (Integer num : solution){
System.out.print(num + " ");
}
System.out.println("Add up to 21");
}
}
private static HashSet twentyOne(ArrayList<Integer> user_input){
return new HashSet<ArrayList<Integer>>();
}
}
基本的に、変数の初期化を行わずにJavaの再帰問題を書くことはできません。
すなわちdef twentyone(nums, stack = [], answer = set()):
だから私の質問は、私は、私が上の再帰呼び出しを行うことになるメソッド内の変数の初期化せずにJavaのバックトラックに対処するか、どのようにでしょうか?
問題:関数を呼び出す前にそれらを初期化しますか? – Idos
しかし、関数呼び出しの前にスタックを宣言してオブジェクト属性にすると、各再帰インスタンスではスタックは同じではありませんか?私は、それぞれの再帰呼び出しの各スタックが異なる必要があります。 多分私はあまりにも多くのpythonをやったことがあります、それを動作させるために私のJavaコードで何を教えてくれますか? – user7404408