繁体   English   中英

如何编写一个程序,将整数序列读入数组并计算数组中所有元素的交替和?

[英]How to write a program that reads a sequence of integers into an array and that computes the alternating sum of all elements in the array?

编写一个程序,将一个整数序列读入一个数组,并计算该数组中所有元素的交替和。 例如,如果程序是用输入数据执行的

1 4 9 16 9 7 4 9 11 然后计算

1 - 4 + 9 - 16 + 9 - 7 + 4 - 9 + 11 = - 2

到目前为止我有以下代码:

import java.util.Arrays;

/**
This class computes the alternating sum
of a set of data values.
*/
public class DataSet
{
private double[] data;
private int dataSize;

/**
Constructs an empty data set.
*/
public DataSet()
{
final int DATA_LENGTH = 100;
data = new double[DATA_LENGTH];
dataSize = 0;
}

/**
Adds a data value to the data set.
@param x a data value
*/
public void add(double x)
{
if (dataSize == data.length)
data = Arrays.copyOf(data, 2 * data.length);
data[dataSize] = x;
dataSize++;
}

/**
Gets the alternating sum of the added data.
@return sum the sum of the alternating data or 0 if no data has been added
*/
public double alternatingSum()
{
. . .
}
}

我必须使用以下 class 作为测试仪 class:

/**
This program calculates an alternating sum.
*/
public class AlternatingSumTester
{
public static void main(String[] args)
{
DataSet data = new DataSet();

data.add(1);
data.add(4);
data.add(9);
data.add(16);
data.add(9);
data.add(7);
data.add(4);
data.add(9);
data.add(11);

double sum = data.alternatingSum();
System.out.println("Alternating Sum: " + sum);
System.out.println("Expected: -2.0");
}
} 

我为您实现了 alternatingSum 方法:

public double alternatingSum() {
    double alternatingSum = 0;
    if(data != null || dataSize > 0) {
        for(int i = 0; i < dataSize; i = i + 2) {
            alternatingSum += data[i];
        }
        for(int i = 1; i < dataSize; i = i + 2) {
            alternatingSum -= data[i];
        }
    }
    return alternatingSum;
}

我会使用这个简单的逻辑来实现目标。 首先将数组中的所有奇数相加。 然后将相同的所有偶数相加。 现在减去这两个值 n 你会得到你的答案。 希望这可以帮助。

我会使用 for 循环和 boolean 标志来解决这个问题:

set flag to false
set sum to zero
for alle elements in array
 if flag is set
  add to sum
 else 
  subtract from sum

When loop is done you have your sum.
 int[] a = {50, 60, 60, 45, 70};
        int sum = IntStream.range(0, a.length).filter(i -> i % 2 == 0).map(i -> a[i]).sum()
                - IntStream.range(0, a.length).filter(i -> i % 2 == 1).map(i -> a[i]).sum();

        System.out.println("Sum= " + sum);

我使用 stream 执行此操作,首先我使用 Intstream,然后过滤掉偶数索引并获取映射值并添加它们,对奇数索引也执行相同操作,然后减去它。

如果你有 4 个数字,例如a[]={1, 3, 5, 6} ,有几种情况:

operation:
    + + +
    + + -
    + - +
    + - -
    - + +
    - + -
    - - +
    - - -

在你的情况下,“操作”将只是 + - +

使用带有此符号的数组并计算结果。

int k=a[0];
    for(int i = 1; i<= 3; i++){
    if(operation[i-1]=="+".charAt(0))
{k=k+a[i];}
etc...
}

这并不难:)祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM