2017-02-02 2 views
0

私たちはちょうどノングラムの質問のルールとして次の形式で入力を読み込まなければならない小さな実践的な試験をしました。実際のアルゴリズムはまったく難しいことではありませんでしたが、私と私の仲間の誰も、これらの入力をどのようにスキャンして始めるのかを理解できませんでした。1行あたりのカラム数が異なるint 2D配列への入力を読み取る

4 4 

1 1 
1 2 3 
1 
1 

0 
2 
1 1 
2 2 

*actual 4x4 grid here* 

最初の2つの整数は、行数(4)と列数を示します。 (4)したがって、次の4行は各行の規則(2行目は1 2 3)を示し、次の4列は各列の規則を示します(2列目は2 2)。

Cを学ぶ1学期の後、各行の列数が同じで、このJavaモジュールへの4週間は、この種の問題にはまったく対処しないことを教えていませんでした。

nextInt()とdouble forループを使用して配列をスキャンするのは簡単でしたが、ゼロがなければ、この配列では不運でした。

1 1 0 
1 2 3 
1 0 0 
1 0 0 

試験は終わっていますが、私はこの問題の解決方法を知らないことに本当に腹を立てています。あなたからのいくつかの洞察を感謝します。

+0

「次の4行は各行のルールを示します(2行1 2 3)」とはどういう意味ですか?たとえば、「ルール」とはどういう意味ですか? –

+0

ああ、私は本当に私の質問のために必要でなかったので、すべての文脈を完全に光沢をつけました。質問自体に実際のグリッドが与えられ、グリッドが有効な解決策を提示しているかどうかをチェックするために「ルール」を使用することになっていました。もっと知りたい場合はGoogleでノングラムをチェックしてください – browncatmegazord

答えて

1

Javaでは、長さの異なる多次元配列を持つことができます。

ことは、これを試してみてください:

int rows = 4; // read 
int cols = 4; // read 

int[][] arr = new int[rows][]; // notice how we do not tell the cols here 
for(int i=0,i<arr.length;i++){ 
    // read line or somehow get the numbers of the line into an array 
    String line = ... 
    String[] splitLine = line.split(" "); 
    int[] rowArr = new int[splitLine.length]; 
    for(int x=0;x<splitLine.length;x++){ 
     // assume no NumberFormatException 
     rowArr[x] = Integer.parseInt(splitLine[x]); 
    } 
    arr[i] = rowArr; 
} 

、あなたはあなたが行ごとに必要があるとして、4行のあなたの配列を持っていますが、唯一の同じくらいの列:

{{1,1}、{1、2、 Javaでは、多次元配列は単なる配列への参照配列なので、これは機能します。

関連する問題