Вы можете просто заключить свои циклы for в функцию и вызвать ее:
import java.util.Arrays;
void setup(){
float [][] sums = new float[][]{ { 8,6 },
{ 4,2 } };
print("pre: ");
System.out.println(Arrays.deepToString(sums));
matMul(sums,0.5);
print("post:");
System.out.println(Arrays.deepToString(sums));
}
void matMul(float[][] data,float multiplier){
for(int y = 0; y < data.length; y++){
for(int x = 0; x < data[y].length; x++){
data[x][y] *= multiplier;
}
}
}
Вот несколько указателей, если вы только начинаете работать с функциями.
Самая простая вещь функция, которая может сделать, - это инкапсулировать кучу инструкций, но не позволять читать какие-либо данные извне функции и не возвращать никаких данных.
Вот очень простой / скучный пример:
void sayHello(){
println("hello");
}
Суть в том, чтобы ознакомиться с синтаксисом. Функция имеет:
- (возвращаемый) тип: если функция возвращает какой-либо результат, что это за результат? (число, строка текста, объект и т. д. c.), если нет, то это просто
void
- имя (поэтому мы можем его назвать)
- аргументы (0 или более) в скобках, каждый из которых имеет тип и имя (аналогично локальной переменной)
- тело, разделенное символами
{
и }
: все, что определено в этом блоке, видимо только этому блок (кроме того, что возвращается, если что-нибудь). Это называется областью действия функции
Возможно, вы уже определили функции, которые не возвращают результаты: void setup(){}
, void draw(){}
Вы, вероятно, уже вызываемые функции раньше: использовали имя и аргументы (если они есть) в парантезе (например, println("hi");
, point(50,50);
, noCursor();
, et c.)
Вот простой пример функции, которая принимает два входа и возвращает один выход: сумма входных данных:
int sum(int a, int b){
return a+b;
}
Вместо void
мы возвращаем результат типа int
, а аргументы представляют собой пару целых чисел с именами a и b. Единственным дополнительным дополнением является ключевое слово return
, которое используется (как вы уже догадались) для возврата результата (и выхода из функционального блока).
Вот базовый c пример вызова функции:
void setup(){
println(add(2,2));
println(add(4,4));
}
int add(int a, int b){
return a + b;
}
Если вы хотите узнать больше об этом, ознакомьтесь с Обучающее руководство по созданию функций Кевина Воркмана
Имейте в виду, что метод void преобразует ссылку на массив для передачи в качестве аргумента функция. Могут быть ситуации, когда вы не хотите изменять входные данные, но возвращаете результат. В таком случае вы можете либо скопировать массив заранее и передать копию, либо иметь версию функции, которая делает копию для вас:
import java.util.Arrays;
void setup(){
float [][] sums = new float[][]{ { 8,6 },
{ 4,2 } };
print("sums: ");
System.out.println(Arrays.deepToString(sums));
float[][] result = matMul(sums,0.5);
print("result: ");
System.out.println(Arrays.deepToString(result));
print("original:");
System.out.println(Arrays.deepToString(sums));
}
float[][] matMul(float[][] data,float multiplier){
// check input data
if(data == null || data.length == 0){
println("no data to multiply, returning null");
return null;
}
// make another array of the same shape
float[][] result = new float[data.length][data[0].length];
// do the multiplcation, storing the result into the duplicate array
for(int y = 0; y < data.length; y++){
for(int x = 0; x < data[y].length; x++){
result[x][y] = data[x][y] * multiplier;
}
}
// return the result
return result;
}
Обратите внимание на несколько проверок в начале функции: В общем случае, на всякий случай рекомендуется проверить данные, поступающие на экран, и отобразить сообщение, которое поможет легко решить проблему (не тратя много времени на выяснение, что означает ошибка).