Как сделать так, чтобы массив созданный в функции выше был виден в функции ниже?
// функция
public int[][] Numbers() throws FileNotFoundException {
int[][] table = new int [10][10];
String separator = File.separator;
String path = separator + "Users" + separator + "vlad" + separator + "Desktop" + separator + "Test.txt";
File file = new File(path);
Scanner scanner = new Scanner(file);
String line = scanner.nextLine();
String[] numbersString = line.split(" ");
int counter = 0;
int[] numbers = new int [100];
for (String number : numbersString) {
numbers[counter++] = Integer.parseInt(number);
}
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 10; i++) {
table[j][i] = numbers[i]; // этот массив нужно передать в функцию paint
}
}
return table;
}
public void paint(Graphics g, int array[][]) {
super.paint(g);
for (int x = 0; x < H; x++) {
for (int y = 0; y < W; y++) {
g.setColor(COLORS[table[x][y]]); // массив table не виден
g.fillRect(y * size, x * size, size, size);
}
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
У вас есть некий перегруженный метод paint с дополнительным параметром -- двумерным массивом array, который НЕ используется в показанной реализации, то есть достаточно было бы вместо table указать входной параметр этого метода / переименовать входной параметр в table.
public void paint(Graphics g, int table[][]) { // переименован аргумент
super.paint(g);
for (int x = 0; x < H; x++) {
for (int y = 0; y < W; y++) {
g.setColor(COLORS[table[x][y]]);
g.fillRect(y * size, x * size, size, size);
}
}
}
Однако будет неэффективно, если массив данных будет передаваться при отрисовке данного компонента путём вызова метода Numbers():
@Override
public void paint(Graphics g) {
paint(g, Numbers());
}
Поэтому имеет смысл создать поле в данном классе, проинициализировать его один раз, и при отрисовке использовать ссылку на это поле:
private int[][] data = Numbers();
@Override
public void paint(Graphics g) {
paint(g, data);
}
// реализации Numbers / paint(Graphics g, int[][] a)
// ...