2017-02-02 2 views
0

Итак, у нас был небольшой практический экзамен, который требовал, чтобы мы читали входные данные в следующем формате как правила вопроса о неграм. Фактического алгоритма было совсем не сложно, но никто из меня и моих товарищей не мог понять, как вообще отсканировать эти входы вообще.Чтение ввода в двоичный массив с переменным числом столбцов в строке

4 4 

1 1 
1 2 3 
1 
1 

0 
2 
1 1 
2 2 

*actual 4x4 grid here* 

Первые два целых числа указывают количество строк (4) и количество столбцов. (4) Итак, следующие четыре строки указывают правила для каждой строки (1 2 3 для строки 2), а следующие четыре указывают правила для каждого столбца (2 2 для столбца 4) и т. Д.

После семестра, выполняющего C, мы имеем дело только с массивами, где каждая строка имеет одинаковое количество столбцов, а четыре недели в этом модуле Java не научили нас справляться с этой проблемой вообще.

Было бы достаточно легко просканировать массив как таковой, используя nextInt() и цикл double for, но без нулей нам не повезло с этим.

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

Экзамен закончился и все, кроме меня, я действительно недовольна тем, что не знаю, как решить эту проблему. Понравилось бы некоторое понимание от вас, ребята.

+0

Что вы подразумеваете под «Итак, следующие четыре строки указывают правила для каждой строки (1 2 3 для строки 2)»? Например, что вы подразумеваете под «правилами»? –

+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, 3}, {1}, {1}}

Это работает, потому что в Java многомерные массивы - это всего лишь массив ссылок на массивы.

Смежные вопросы