Я туплю уже в полдвенадцатого, или валидатор немного некорректный?
Закомментированный код не равен раскомментированному?
Я себе моск сломал пытаясь интерпретировать в чем именно некорректность задания элемента матрицы (как-то так формулирует валидатор причину отказа в валидации).
Ну и заодно еще вопрос - является ли принятый валидатором код другого метода - drawMatrix - корректным?
По-моему во вложенном цикле должно быть j < matrix[i].lenght; (ну или любого другого i). Иначе далеко не факт, что width будет равняться height и мы не улетим за пределы массива.
Условие этого этапа:
Первый метод - setPoint будет "ставить точку в координатах x,y цветом c".
В методе надо:
а) округлить x и y до целых чисел
б) занести в matrix[y][x] значение с
в) ничего не делать, если x < 0 или y < 0 или y > matrix.length или x > matrix[0].length
Второй метод - drawMatrix копирует переданную ему картинку (матрицу) в матрицу Canvas.
И не просто копирует, а начиная с координат x, y
В методе надо:
а) с помощью двух вложенных циклов пройтись по всем ячейкам переданной картинки
б) если значение ячейки элемента [i][j] полученной матрицы не равно 0, то покрасить в матрице объекта Canvas точку (x+j, y+i) в цвет c:
setPoint(x+j, y+i, c)
void setPoint(double x, double y, char c) {
int intX = (int)Math.round(x);
int intY = (int)Math.round(y);
/* if ( (intX >= 0) && (intY >= 0) && (intX <= matrix[0].length) && (intY <= matrix.length) ) {
matrix[intY][intX] = c;
}*/
if ( (intX < 0) || (intY < 0) || (intX > matrix[0].length) || (intY > matrix.length) ) {
}
else {
matrix[intY][intX] = c;
}
}
void drawMatrix (double x, double y, int[][] matrix, char c) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
if (matrix[i][j] != 0) {
setPoint(x + j, y + i, c);
}
}
}
}
this.matrix = new char[height + 2][width + 2];