よし、System.in から入力を取得する作業に取り組んでいます。最初の行は、行列のサイズを表す int (n) です。次の n 行は、次のような行列そのものです。
10
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 1 0 0 0 0
0 0 0 0 1 0 0 1 1 0
0 1 0 0 0 0 0 1 0 0
0 0 0 0 0 1 1 0 0 0
1 1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
問題は、単一の入力に複数の行列が存在する可能性があるため、次の行には、単一の 0 の行に到達するまで、別の int と対応する行列が下にあることです。次に、各行列を上部のサイズと共に渡す必要があります。数値を 2D 配列に追加するメソッドへの BufferedReader として。
入力を分割してメソッドに送信する方法が少しわかりません。skip() を使用して新しい BufferedReader を作成し、毎回サイズを指定することはできますか? 私が遭遇しているように見える最大の問題は、サイズを読み取ることですが、サイズは既に読み取られているため除外されます。
乾杯
編集: Bhesh Gurung のメソッドを使用して動作するようになりました。ありがとうございます。これが私が最終的に得たものです。if ステートメントのいくつかは冗長だと思いますが、機能します。
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
ArrayList<GraphAdjMatrix> mat = new ArrayList<GraphAdjMatrix>();
try
{
String line = buffer.readLine().trim();
String[] tokens = line.split("\\s+");
boolean[][] adj;
int n = Integer.parseInt(tokens[0]);
while (n != 0) {
if (tokens.length == 1 && n > 0) {
adj = new boolean[n][n];
for (int i = 0; i < n; i++) {
line = buffer.readLine().trim();
tokens = line.split("\\s+");
if (tokens.length != n)
{
throw new Error("bad format: adjacency matrix");
}
for (int j = 0; j < n; j++)
{
int entry = Integer.parseInt(tokens[j]);
adj[i][j] = entry != 0;
}
}
mat.add(new GraphAdjMatrix(adj, n));
}
line = buffer.readLine().trim();
tokens = line.split("\\s+");
n = Integer.parseInt(tokens[0]);
}
}
catch (IOException x) { throw new Error("bad input stream"); }