手头的问题是:
该方法应为每一行计算绝对值的总和 该行的元素。该方法应返回最大值 这些总和。例如,如果应用于测试数组,则为方法 应该返回值max(3 + 1 + 4 + 0,5 + 9 + 2 + 6,5 + 3 + 7 + 8)= max(8,22,23) = 23.
测试数组:
3 -1 4 0
5 9 -2 6
5 3 7 -8
到目前为止,我已经创建了一个获取所有行值的方法,并将列表中的总和返回给我;但是,我希望它将负整数转化为正整数。 到目前为止,这是我的代码:
public static int[] rowSums(int[][]array) {
int[] a = new int[array.length];
for (int i = 0;i<array.length;i++){
int sum = IntStream.of(array[i]).sum();
a[i]=sum;
} return a;}
输出:
[6,18,7]
答案 0 :(得分:2)
您可以使用Math#abs
(代表绝对值)将任何负数转换为正数:
int sum = IntStream.of(array[i]).map(Math::abs).sum();
如果您想丢失那些for循环,您甚至可以坚持使用流:
public static int[] rowSums(int[][] array) {
return Arrays.stream(array)
.mapToInt(i -> Arrays.stream(i).map(Math::abs).sum())
.toArray();
}
答案 1 :(得分:2)
您可以在这里使用地图。所以代码就是这样。
public static int[] rowSums(int[][]array) {
int[] a = new int[array.length];
for (int i = 0;i<array.length;i++){
int sum = IntStream.of(array[i]).map(n->{
if(n<0) {
return n*-1;
}
else {
return n;
}
}).sum();
a[i]=sum;
} return a;}
在这里,我只是将所有负整数变为正数。
答案 2 :(得分:1)
更新此行
int sum = IntStream.of(array[i]).sum();
到
int sum = IntStream.of(array[i]).map(Math::abs).sum();
整个矩阵的解决方案(此片段将返回23):
Optional<Integer> maxVal = Arrays.stream(matrix)
.map(array -> Arrays.stream(array).map(Math::abs).sum())
.reduce(Integer::max);
没有可选
int maxVal = Arrays.stream(matrix)
.map(array -> Arrays.stream(array).map(Math::abs).sum())
.reduce(Integer::max).get();
答案 3 :(得分:0)
只需使用:
Math.abs(var)
如果变量为负,则会将var变为正值。
因此,完整的答案如下:
public static int[] rowSums(int[][]array) {
int[] a = new int[array.length];
for (int i = 0;i<array.length;i++){
int sum = IntStream.of(array[i]).map(Math::abs).sum();
a[i]=sum;
} return a;}
答案 4 :(得分:0)
使用Math.abs()
它会接受任何数字并将其作为正数返回。你需要它在这一行:
int sum = IntStream.of(array[i]).sum();
取array[i]
并使其绝对。所以
IntStream.of(Math.abs(array[i]).sum();
答案 5 :(得分:0)
将所有数字更改为正数。这可以使用Math.abs(int)
完成。请查看link。