C++のこのコード
void generate_moves(char _board[9], std::list<int> &move_list) {
for(int i = 0; i < 9; ++i) {
if(_board[i] == 0) {
move_list.push_back(i);
}
}
}
私はそのようにコーディングしたいのですが、Javaで。どうすればいいですか?
void generate_moves(char _board[], List<Integer> move_list) {
for (int i = 0; i < _board.length; ++i) {
if (_board[i] == 0) {
move_list.add(i);
}
}
}
Javaへの正確な翻訳は次のとおりです。
import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
char[] board = new char[]
{
'o', 'o', 'o',
'x', 'x', 'x',
'x', 'x', 'x'
};
List<int> moves = new ArrayList<int>();
generateMoves ( board, moves );
}
public static void generateMoves(char[] board, List<int> moves )
{
for (int i = 0; i < board.length; ++i)
{
if (board[i] == 0)
{
moves.add ( i );
}
}
}
}
すべてのオブジェクトは、Javaではポインタによって渡されたと見なされるためです。あなたが特にそれをしない限り、コピーはありません。
この場合、Java参照は多かれ少なかれc++ポインタとして機能します。
public void generate_moves(..., List<Integer> move_list) {
...
move_list.push_back(i);
}
この場合、参照move_listの呼び出しpush_back
は、ポインターの例とまったく同じように機能します。オブジェクトインスタンスへの参照が追跡され、メソッドが呼び出されます。
ポインタ演算を使用して配列内の位置にアクセスすることはできません。これはJavaでは不可能です。