各要素のタイプがcharである2D配列を初期化しようとしています。これまでのところ、この配列は次の方法でのみ初期化できます。
public class ticTacToe
{
private char[][] table;
public ticTacToe()
{
table[0][0] = '1';
table[0][1] = '2';
table[0][2] = '3';
table[1][0] = '4';
table[1][1] = '5';
table[1][2] = '6';
table[2][0] = '7';
table[2][1] = '8';
table[2][2] = '9';
}
}
配列が10 * 10の場合、それは簡単な方法だと思います。それを行うための効率的な方法はありますか?
このようなものはどうですか:
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = (char) ('1' + row * 3 + col);
次の完全なJavaプログラム:
class Test {
public static void main(String[] args) {
char[][] table = new char[3][3];
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = (char) ('1' + row * 3 + col);
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
System.out.println (table[row][col]);
}
}
出力:
1
2
3
4
5
6
7
8
9
これは、Unicodeの数字が\ u0030から連続しているためです('0'
から得られるものです)。
式'1' + row * 3 + col
(row
とcol
を0
と2
の間で変化させる場合)は、単に1
から9
までの文字を提供します。
明らかに、さらに進んだ場合、10
(two文字であるため)という文字は表示されませんが、3x3の場合は正常に機能します。次のようなものを使用して、その時点で配列の内容を生成する方法を変更する必要があります。
String[][] table = new String[5][5];
for (int row = 0; row < 5; row ++)
for (int col = 0; col < 5; col++)
table[row][col] = String.format("%d", row * 5 + col + 1);
より短い方法は、次のように行います。
private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
読みやすい/入力しやすい。
table = new char[][] {
"0123456789".toCharArray()
, "abcdefghij".toCharArray()
};
本当にしたい場合はforループを使用できます。
char table[][] table = new char[row][col];
for(int i = 0; i < row * col ; ++i){
table[i/row][i % col] = char('a' + (i+1));
}
またはbheshが言ったことをしてください。
Paxdiablo(12年12月)が自動化された、より汎用性の高いアプローチのために提案したものに従うことができます。
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = (char) ('1' + row * 3 + col);
効率の面では、実装の規模に依存します。 2D配列を値0〜9に初期化するだけの場合、次のように同じステートメント内で定義、宣言、初期化する方がはるかに簡単です。private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
または、アルゴリズムの拡張を計画している場合、以前のコードはより効率的であることがわかります。