gpt4 book ai didi

java - 将二维数组中的每个元素相除

转载 作者:行者123 更新时间:2023-12-02 08:33:24 24 4
gpt4 key购买 nike

我有 x 和 y 坐标的总和,我需要计算平均值

float [][] sums = new float[n][2];

例如我的数组包括:


{ [ 8,6 ],
[ 4,2 ] }

除以2后:


{ [ 4,3 ],
[ 2,1 ] }

我可以用循环来做到这一点,但我想知道是否可以用 1 个函数来做到这一点。

最佳答案

您可以简单地将 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");
}

重点是熟悉语法。一个函数有:

  • (返回)类型:如果函数返回任何结果,它是什么类型的结果? (数字、文本字符串、对象等),如果不是,则只是 void
  • 一个名字(这样我们就可以调用它)
  • 括号内的参数(0 个或多个),每个参数都有类型和名称(类似于局部变量)
  • {} 符号界定的主体:此 block 中定义的所有内容仅对此 block 可见(返回的内容除外,如果有的话)。这称为函数的范围

您可能已经定义了不返回结果的函数:void setup(){}void draw(){}

您之前可能已经调用过函数:在括号中使用了名称和参数(如果有)(例如 println("hi");point(50,50); noCursor(); 等)

这是一个接受两个输入并返回一个输出的函数的简单示例:输入之和:

int sum(int a, int b){
return a+b;
}

我们返回一个 int 类型的结果,而不是 void,参数是一对名为 a 和 b 的整数。唯一额外的事情是 return 关键字,用于(您猜对了)返回结果(并退出功能 block )。

这是调用该函数的基本示例:

void setup(){
println(add(2,2));
println(add(4,4));
}

int add(int a, int b){
return a + b;
}

如果您想了解更多信息,请查看 Kevin Workman's Creating Functions Processing Tutorial

请记住,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;
}

请注意函数开始时的一些检查:一般来说,最好验证传入的数据数据,以防万一,并显示一条消息,以便轻松解决问题(无需花费太多时间来弄清楚)错误意味着什么)。

关于java - 将二维数组中的每个元素相除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60308756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com