Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从单个数组中添加和减去值_Java_Arrays_Addition_Subtraction - Fatal编程技术网

Java 从单个数组中添加和减去值

Java 从单个数组中添加和减去值,java,arrays,addition,subtraction,Java,Arrays,Addition,Subtraction,我无法从单个数组中减去值。如果我将数字1、2、3、4、5存储在一个数组中,我如何才能找到差异 例如1-2-3-4-5=-13 我知道如何求一个数组的值之和,但在从下一个数组元素中减去一个数组元素以得到正确答案时遇到了困难 整数和=0 if (operator == '+'){ for ( int j = 0; j < intArray.length; j++ ) { sum += intArray[j]; } } if (operator == '-'){ for (

我无法从单个数组中减去值。如果我将数字1、2、3、4、5存储在一个数组中,我如何才能找到差异

例如
1-2-3-4-5=-13

我知道如何求一个数组的值之和,但在从下一个数组元素中减去一个数组元素以得到正确答案时遇到了困难

整数和=0

if (operator == '+'){
  for ( int j = 0; j < intArray.length; j++ ) {
    sum += intArray[j]; 
  }
}
if (operator == '-'){
  for ( int j = 0; j < intArray.length; j++ ) {
    sum += intArray[j] - intArray[j+1] ; 
  }
}

System.out.println("The answer is " + sum);
if(运算符=='+')){
对于(int j=0;j
您应该从索引0处的和开始,然后调用-=所有其他元素。目前,您正在执行index-(index-1),这将失败,因为您没有检查越界。此外,在当前的实现中,数学计算也将是错误的,因为您使用的值是两次相减,而不是一次相减

用减法A[1,2,3,4]取这个数组

sum = 0;
sum += 1 - 2;
sum is -1; (Correct)
sum += 2 - 3;
sum is (-1 + -1) = -2 (Wong, should be -4)
sum += 3 - 4;
sum is (-2 - 1) = -3 (Wrong should be -8)
sum += 4 - A[4] (ERROR index out of bounds)
下面是将值减去一次的实现

if (operator == '-'){
  sum = intArray.length > 0 ? intArray[0] : 0;
  for ( int j = 1; j < intArray.length; j++ ) {
    sum -= intArray[j]; 
  }
}
if(运算符=='-'){
sum=intArray.length>0?intArray[0]:0;
对于(int j=1;j
您总是对运算符
-
执行正和
+=
。 但是用这个来代替呢

具有以下返回功能:

static IntBinaryOperator operatorFunction(char operator) {
  if (operator == '-') {
    return (int1, int2) -> int1 - int2;
  }
  return (int1, int2) -> int1 + int2;
}
它会像您所期望的那样打印
-13
。这就是你所需要的。请注意,您还可以使用
IntStream.sum
来实现简单的求和。使用
运算符功能
,如果您愿意,也可以稍后添加
*
÷

编写上述代码的另一种方法(使用中间值):

从这里,您可以调用
orElse(0)
,或使用
orelsetrow(()->…)
等引发异常。只需查看以获取您的选项。一旦您离开原语
int
,您可能需要使用和交换代码


顺便说一下,在当前代码中还有一个
IndexOutOfBoundException
。但是,如果你可以使用
和这么少的代码行,为什么还要处理索引和数组呢?

我假设你想减去1-2-3-4-5,它等于-13

所以你的错误来了
sum+=intArray[j]-intArray[j+1]

操作:-

         Iteration 1:- sum=-1       which is     (1-2)       sum=-1

         Iteration 2:sum=sum+(2-3)  which is     (-1+2-3)    sum=-2

         Iteration 3:sum=sum+(3-4)  which is     (-2+3-4)    sum=-3

         Iteration 4:sum=sum+(4-5)  which is     (-3+4-5)    sum=-4

         Iteration 5:sum=sum+(5-Garbage value or indexoutofbound exception)         
          sum=garbage value

尝试使用
sum-=intArray[j]

我们必须获取数组中的第一个值,然后根据运算符从中减去或添加剩余值。此操作如下所示:

int sum, dif;
if(intArray.length >= 1){
  sum = intArray[0];
  dif = intArray[0];
}
if (operator == '+'){
   if(intArray.length > 1){
     for ( int j = 1; j < intArray.length; j++ ) {
       sum += intArray[j]; 
     }
   }
   System.out.println("The sum is = " + sum);
}
if (operator == '-'){
  if(intArray.length > 1){
    for ( int j = 1; j < intArray.length; j++ ) {
      dif -= intArray[j]; 
    }
  }
  System.out.println("The difference is = " + dif);
}
int和,dif;
如果(intArray.length>=1){
总和=整数[0];
dif=intArray[0];
}
if(运算符=='+'){
如果(阵列长度>1){
对于(int j=1;j1){
对于(int j=1;j
IntStream
和一些函数式编程

import java.util.Arrays;
import java.util.stream.IntStream;
int myArray[] = {1,2,3,4,5};
int sum = IntStream
          // get all the indices
          .range(0, myArray.length) 

          // for the 1st element use the +ve sign 
          // and for the rest use -ve sign: so it 
          // will generate 1,-2,-3,-4,-5
          .map(i -> i == 0? myArray[i] : -myArray[i]) 

          // add the generated elements using map: 1-2-3-4-5
          .sum(); 

System.out.println(sum); // -13

//这是一个非常简单的解决方法

public class Minimize {

        public static int substractArrayValues(int [] q){
            int val=0;
            for (int i=0; i<q.length; i++){

                if (i==0){
                    val=q[i];
                }
                else {
                    val=val-q[i];
                }
            }
            return val;

        }

        public static void main(String[] args) {

            int [] q={1,2,3,4,5};

            System.out.println(substractArrayValues(q));
        }

    }
公共类最小化{
公共静态int substractArrayValue(int[]q){
int-val=0;

对于(int i=0),你尝试使用“-=”而不是“+=”吗?你的例子对第一个元素给出了特殊的处理。对吗?你的意思是1-2-3-4-5?或者你的意思是-1-2-3-4-5(从第一个元素开始,从0个开始)?我在解释它的中间。soundslikeodd@soundslikeodd增加了解释,希望能说清楚。
import java.util.Arrays;
import java.util.stream.IntStream;
int myArray[] = {1,2,3,4,5};
int sum = IntStream
          // get all the indices
          .range(0, myArray.length) 

          // for the 1st element use the +ve sign 
          // and for the rest use -ve sign: so it 
          // will generate 1,-2,-3,-4,-5
          .map(i -> i == 0? myArray[i] : -myArray[i]) 

          // add the generated elements using map: 1-2-3-4-5
          .sum(); 

System.out.println(sum); // -13
public class Minimize {

        public static int substractArrayValues(int [] q){
            int val=0;
            for (int i=0; i<q.length; i++){

                if (i==0){
                    val=q[i];
                }
                else {
                    val=val-q[i];
                }
            }
            return val;

        }

        public static void main(String[] args) {

            int [] q={1,2,3,4,5};

            System.out.println(substractArrayValues(q));
        }

    }